在系列中执行本机js promise

alb*_*ini 8 javascript node.js promise

我必须为数组中的每个项目调用一些异步任务的承诺,但我想连续执行这些.

Promise.all仅用于具有合并promise列表的新promise,但它不会按顺序调用它们.

如何使用标准的promise api来实现这一点,而没有第三方库,如Q,bluebird ....

jfr*_*d00 20

使用.then()返回另一个promise的回调链接promises .所以,假设你有三个函数a,b和c都返回一个promise.您可以链接它们(按顺序执行),如下所示:

a().then(b).then(c).then(function(result) {
   // all are done here
});
Run Code Online (Sandbox Code Playgroud)

如果你正在处理一个数组并且你myFunc想要为数组中的每个项调用一个promise-returns函数,你可以使用一个标准的数组设计模式和promises .reduce()来一次遍历数组一个项目,就像这样:

var items = [...];

items.reduce(function(p, item) {
    return p.then(function() {
        return myFunc(item);
    });
}, Promise.resolve());
Run Code Online (Sandbox Code Playgroud)

事实证明,这实际上只是.then()像第一个例子那样链接一堆处理程序,但是使用结构.reduce()来为你走数组.