Ich versuche, eine Reihe von Versprechen zu führen. Ich habe die Github-Seite von q kriskowal und sein Beispiel von Sequenzen gelesen, aber er hat nie das vorherige Ergebnis für das nächste Versprechen verwendet.q Versprechen nodejs Sequenz
return foo(initialVal).then(bar).then(baz).then(qux);
So ist mein Code:
var Q = require('Q');
function foo(arg) {
console.log('foo arg=' + arg);
var d = Q.defer();
bar(arg+1)
.then(function(){
d.resolve(arg);
}, function(error){
d.reject(error);
})
return d.promise;
}
function bar(arg) {
console.log('bar arg=' + arg);
var d = Q.defer();
d.resolve(arg);
return d.promise;
}
function test() {
var defer = Q.defer();
foo('a')
.then(function (success) {
var def1 = Q.defer();
console.dir('success: ' + success);
bar('test');
})
.then(function (rest) {
return foo('b')
})
.then(function(success){
defer.resolve(success);
}, function(error){
defer.reject(error);
});
return defer.promise;
}
var b = [test(), test(),test()];
Q.all(b)
.then(function(result){
console.dir(result);
})
Die Ausgabe lautet:
foo arg=a
bar arg=a1
foo arg=a
bar arg=a1
foo arg=a
bar arg=a1
'success: a'
bar arg=test
'success: a'
bar arg=test
'success: a'
bar arg=test
foo arg=b
bar arg=b1
foo arg=b
bar arg=b1
foo arg=b
bar arg=b1
[ 'b', 'b', 'b' ]
Was ich will, ist:
foo arg=a
bar arg=a1
'success: a'
bar arg=test
foo arg=b
bar arg=b1
foo arg=a
bar arg=a1
'success: a'
bar arg=test
foo arg=b
bar arg=b1
foo arg=a
bar arg=a1
'success: a'
bar arg=test
foo arg=b
bar arg=b1
Vielen Dank für Ihr Beispiel redben. So, jetzt ist es klarer. Aber wie kann ich eine Reihe von Aufgaben dynamisch in einer Reihe – CHelbig
'tasks.reduce (Funktion (lastPromise, Aufgabe)) {return lastPromise? LastPromise.then (Aufgabe): Aufgabe (resultHolder)}) .then (allDoneFunction) "" – redben