【发布时间】:2019-11-03 00:18:12
【问题描述】:
我正在尝试创建一个 Promises 数组,它会在完成时向控制台打印一条消息。但是,即使数组中有 10 个 promise 对象,它似乎也只打印一次。
我已经尝试过ES6 Promises/calling a function after multiple promises are fulfilled (can't use Promises.all)中的解决方案 但它仍然不起作用。
function fillArrayWithPromise(promise, numTimes) {
let promiseArr = Array(numTimes).fill(promise);
console.log(promiseArr.join("-"));
return promiseArr
}
var sendStuffB = new Promise(
function(resolve, reject) {
try {
console.log("submitted one req");
} catch (error) {
console.log("Error: " + error);
}
}
)
let testA = fillArrayWithPromise(sendStuffB, 10);
Promise.all(
testA.map(promise => Promise.resolve(promise).catch(err => console.log(error)))
).then(function() {
console.log("End");
});
我希望控制台打印 10 次“发送一个对象”,但它只打印到控制台一次,之后会无限期地继续运行。
这是错误日志: 运行测试脚本... 发送了一个对象 提交了一份申请 [object Promise]-[object Promise]-[object Promise]-[object Promise]-[object Promise]-[object Promise]-[object Promise]-[object Promise]-[object Promise]-[object Promise]
【问题讨论】:
-
"但它只打印到控制台一次" - 因为你的脚本中只有一个实际的
Promise。promise中的fillArrayWithPromise是对sendStuffB的引用,因此您以该引用的numTimes副本数组结尾 - 但没有引用的Promise的副本 -
注意:在数组中复制相同的 Promise 对象是非常没用的。
-
这里有两个错误:你没有解决承诺,并且你有相同的承诺(只会执行一次)10次。
标签: javascript node.js es6-promise