Цитата:
как пример применения. нужно сделать несколько асинх. запросов, дождаться их завершения и выполнить какую-то функцию. Тоесть ставим несколько блокировок, а после них нужную функцию. А вот в методом 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, время: 12:45. |