一尘不染

如何按顺序执行诺言数组?

javascript

我有一系列的诺言,需要按顺序运行。

var promises = [promise1, promise2, ..., promiseN];

调用RSVP.all将并行执行它们:

RSVP.all(promises).then(...);

但是,如何依次运行它们?

我可以像这样手动堆叠它们

RSVP.resolve()
    .then(promise1)
    .then(promise2)
    ...
    .then(promiseN)
    .then(...);

但是问题在于承诺的数量各不相同,并且承诺的数组是动态构建的。


阅读 293

收藏
2020-05-01

共1个答案

一尘不染

如果您已经将它们放在数组中,那么它们已经在执行。如果您有一个承诺,那么它已经在执行。这与promise无关(Task即,在.Start()方法方面,它们不像C#一样)。.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
});
2020-05-01