Сообщение от B~Vladi
|
Ещё кое-что надумал, пока пытался заснуть вчера... Асинхронность. Например (из прошлого html-кода):
|
ну асинхронность она определенно усложняет. Просто пока ее немного, это не мешает. А потом начинаешь изобретать цепочки вызовов, т.е. прячешь эту асинхронность. На github'е видел не одну библиотеку, в которой это есть. Например, можно так реализовать, через рекурсию, для небольших цепочек, на mootools:
var AsyncChain = new Class({
Implements: [Events, Options],
_chain: [],
_state: {},
initialize: function( options ){
this.setOptions( options );
},
add: function( f ){
this._chain.push( f );
return this;
},
run: function(){
run.of(this)(0);
return this;
function run( i ){
var f = this._chain[i];
if( ! f )
return;
f.of(this)( run.of(this).pass(i+1) );
}
},
clear: function(){
this._chain = [];
return this;
},
set: function( options ){
$extend( this._state, options );
return this;
}
});
пример использования:
var chain = new AsyncChain();
chain.setOptions({
'onFailure': onFailure.of(this).pass(chain),
'onCancel': onCancel.of(this).pass(chain)
})
.set( options )
.add( this._disableLink )
.add( this._setPhotoUrl )
.add( this._setPhotoDownloadUrl )
.add( this._showThrobber )
.add( photosession.getThumbnailPath )
.add( photosession.setPhotoUploadUrl )
.add( photosession.loadPhoto )
.add( photosession.loadCropResize )
.add( this._hideThrobber )
.add( this._showDialog )
.add( photosession.cropResize )
.add( photosession.setThumbnailFormField )
.add( this._loadThumbnail )
.add( this._showThumbnail )
.add( this._closeDialog )
.add( this._enableLink )
.run();