Цитата:
как пример применения. нужно сделать несколько асинх. запросов, дождаться их завершения и выполнить какую-то функцию. Тоесть ставим несколько блокировок, а после них нужную функцию. А вот в методом FINoM такое не сделать. |
vflash, так тебе не цепочка, а defered тогда нужен
|
Цитата:
Цитата:
|
к тому что на данный момент ты подразумеваешь, что значения будут передаваться между соседними функциями
waiting(function(runNext) { runNext(1, 2, 3, 4, 5, 6, 7, 8, 9); }) .wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) {...}) .wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) {...}) .wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) {...}) .wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) { // и только здесь нам пригодятся эти значения }) альтернативный вариант new AsyncChain() .add(function(NEXT) { this.state('a1', 1); this.state('a2', 2); this.state('a3', 3); this.state('a4', 4); this.state('a5', 5); this.state('a6', 6); this.state('a7', 7); this.state('a8', 8); this.state('a9', 9); NEXT(); }) .add(function(NEXT) {...}) .add(function(NEXT) {...}) .add(function(NEXT) {...}) .add(function(NEXT) { // а теперь используем их, this.state('a...'); }) .go(); |
x-yuri, не вижу смысла городить такой костыль. Человек, если ему захочется передавать через всю цепочку состояния переменных, может просто-напросто передавать объект.
wait(function(next){ var states = {a: 1, b: 2} next(states); }).wait(function(next, states){ states.c = 3; next(states); }).wait(function(next, states){ states.d = 4; states.e = 5; }); |
http://jsfiddle.net/finom/XSGub/52/ — сделал сделал this для всей цепочки одним объектом (раньше в первой функции this === window). Функции get и set здесь излишни, как по мне.
wait(function(next){ this.blabla = {a:1,b:2} next(); }).wait(function(next){ this.blabla.c = 3; next() }).wait(next) { log(this.blabla); // {a:1, b:2, c:3} }); |
Можно присоединится?,
сейчас в голову велосипед приехал: var chain = function () {}; chain.prototype.deferred = []; chain.prototype.add = function (fn) { this.deferred.push(fn); return this; } chain.prototype.next = function () { if (this.deferred.length) { this.deferred.shift().apply(this); } } chain.prototype.start = function () { this.deferred.shift().apply(this); } new chain(). add(function(){ var self = this; setTimeout(function () { console.log(1); self.next(); }, 1000); }). add( function(){ var self = this; setTimeout(function () { console.log(2); self.next(); }, 1000); }). add( function(){ console.log(3); }). start(); |
Цитата:
w = function(){ return wait(...).wait(...) } w(); Цитата:
var self = this;тоже кажется излишним. + у тебя теряется целостность. Если последний коллбек сработал, следующие звенья не запустятся. |
Цитата:
var chain = function () {}; chain.prototype.deferred = []; chain.prototype.add = function (fn) { this.deferred.push(fn); return this; } chain.prototype.next = function () { if (this.deferred.length) { this.deferred.shift().apply(this); } } chain.prototype.start = function () { this.deferred.shift().apply(this); } var a = new chain(). add(function(){ var self = this; setTimeout(function () { console.log(1); self.next(); }, 1000); }). add( function(){ var self = this; setTimeout(function () { console.log(2); self.next(); }, 1000); }). add( function(){ console.log(3); this.next(); }); setTimeout(function(){ console.log('добавим чего-нибудь в цепь'); a.add(function(){ console.log(4); }).start(); },2000); Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 23:14. |