我有一系列的诺言,需要按顺序运行。
var promises = [promise1, promise2, ..., promiseN];
调用RSVP.all将并行执行它们:
RSVP.all(promises).then(...);
但是,如何依次运行它们?
我可以像这样手动堆叠它们
RSVP.resolve() .then(promise1) .then(promise2) ... .then(promiseN) .then(...);
但是问题在于承诺的数量各不相同,并且承诺的数组是动态构建的。
如果您已经将它们放在数组中,那么它们已经在执行。如果您有一个承诺,那么它已经在执行。这与promise无关(Task即,在.Start()方法方面,它们不像C#一样)。.all什么都不执行,只会返回一个承诺。
Task
.Start()
.all
如果您有一组promise返回函数:
var tasks = [fn1, fn2, fn3...]; tasks.reduce(function(cur, next) { return cur.then(next); }, RSVP.resolve()).then(function() { //all executed });
或值:
var idsToDelete = [1,2,3]; idsToDelete.reduce(function(cur, next) { return cur.then(function() { return http.post("/delete.php?id=" + next); }); }, RSVP.resolve()).then(function() { //all executed });