【发布时间】:2017-11-30 13:31:56
【问题描述】:
我有一个对象数组,并为每个对象执行一个承诺。然后,如果一切都解决了,我希望在Promise.all 中接到.then 的电话。问题是在下面的例子中我只得到输出
所有方法都在方法 2 中完成
我认为下面的代码几乎可以解释,但简而言之,我正在做的是:
- 将 3 个对象声明为
vals,我想基于每个对象创建一个 Promise。 - 方法一:使用
vals.map获取基于vals的promise数组 - 方法 2:使用
for遍历vals,并在每次迭代中推送一个新的 Promise。
这段代码有什么问题,为什么它只适用于方法 2?
#!/usr/bin/env node
let vals = [
{
name: "name1"
},
{
name: "name2"
},
{
name: "name3"
}
];
function newPromise(obj) {
return new Promise((resolve) => Promise.resolve(obj.name))
}
/**
* Approach 1: use .map function to get an array of promises
*/
let promises = vals.map((item) => newPromise(item));
Promise.all(promises)
.then(() => console.log("All done in approach 1"))
.catch(() => console.log("Error in approach 1"));
/**
* Approach 2: iterate through vals using a for an push a new promise for the promises array
*/
let promises2 = [];
for (let i = 0 ; i < vals.length; i++) {
promises.push(newPromise(vals[i]));
}
Promise.all(promises2)
.then(() => console.log("All done in approach 2"))
.catch(() => console.log("Error in approach 2"));
我正在使用节点 8.9.1 和 ES6(原生 Promises)。
【问题讨论】:
标签: javascript node.js ecmascript-6 promise es6-promise