javascript - 如何按顺序执行 promise 数组?

标签 javascript ember.js promise rsvp.js

我有一系列需要按顺序运行的 promise 。

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

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

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

但是,我怎样才能按顺序运行它们呢?

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

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

但问题是 promise 的数量是变化的,而且 promises 的数组是动态构建的。

最佳答案

如果您已经将它们放在数组中,那么它们已经在执行。如果你有一个 promise ,那么它已经在执行了。这不是 promises 的问题(即在 .Start() 方法方面,它们不像 C# Task)。 .all 不执行任何操作 它只是返回一个 promise 。

如果你有一组 promise 返回函数:

var tasks = [fn1, fn2, fn3...];

tasks.reduce(function(cur, next) {
    return cur.then(next);
}, RSVP.resolve()).then(function() {
    //all executed
});

或值(value)观:

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
});

关于javascript - 如何按顺序执行 promise 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20100245/

相关文章:

javascript - 使用javascript删除文本节点周围的标签

javascript - 我如何在悬停时设置 SVG <use> 元素的样式?

javascript - Ember 引擎未捕获错误 : Could not find module ember-views/views/select

javascript - 异步/等待错误处理

javascript - 为什么 toggle todo 在 Redux 中不起作用?

javascript - Typescript 2 — 使用 ES6 导入和要求?

javascript - 我如何在 EmberJS 应用程序中使用 Jitsi Meet

javascript - 在 Ember 中(重新)呈现 View 模板时如何收到通知?

javascript - 创建一个返回 Promise 并处理回调的函数

javascript - Promise 中的代码执行和使用 return 语句