【发布时间】:2018-07-16 15:12:35
【问题描述】:
我想知道这两个代码块是不是基本等价的:
const executePromises = function(listOfProviders){
let p = Promise.resolve(null);
for(let i = 0; i < listOfProviders.length; i++){
p = p.then(v => listOfProviders[i]());
}
return p;
};
我相信上面基本上相当于:
const executePromises = async function(listOfProviders) {
for(let i = 0; i < listOfProviders.length; i++){
await listOfProviders[i]();
}
};
有人发现有差异吗?
【问题讨论】:
-
首先,您将返回一个解析为最后一个
listofProviders函数调用结果的承诺。在第二个中,您等待所有listofProviders承诺,但对结果不做任何事情。所以,不,它们不一样。 -
另外
p是const。您无法重新分配给它。 -
实际上,(一旦改成
let而不是const)executePromises返回的promise就是最后一次调用listOfProviders[i]()返回的promise -
@CertainPerformance 在第一个函数中(假设 const 是固定的)该函数返回
p,这是链中的最后一个承诺。 -
使第二个代码相同...在循环前添加
let p,然后是p = await listOfProviders[i]();,最后在循环后添加return p
标签: javascript node.js async-await es6-promise