gpt4 book ai didi

javascript - ES6 Promises.all() 不全部执行(promises 中没有捕获到错误)

转载 作者:搜寻专家 更新时间:2023-10-31 23:44:16 25 4
gpt4 key购买 nike

我正在尝试创建一个 Promises 数组,这些 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 次“发送一个对象”,但它只打印到控制台一次,之后会无限期地继续运行。

这是错误日志:运行测试脚本...已发送一个对象提交了一个请求[对象 promise ]-[对象 promise ]-[对象 promise ]-[对象 promise ]-[对象 promise ]-[对象 promise ]-[对象 promise ]-[对象 promise ]-[对象 promise ]-[对象 promise ]

最佳答案

因为sendStuffB只是一个promise,所以只resolve一次。数组中的所有其他项目都引用了同一个已解决的 promise 。

取而代之的是,在 fillArrayWithPromise 函数中,传递一个返回 promise 的函数,并为每个数组项分别调用该函数。

此外,请始终记住根据需要在 promise 构造函数中解析或拒绝 promise。

function fillArrayWithPromise(promiseFn, numTimes) {
let promiseArr = Array(numTimes).fill(promiseFn).map(fn => fn()); //see this
return promiseArr
}

var sendStuffB = () => new Promise( // converted to function
function(resolve, reject) {
try {
console.log("submitted one req");
resolve(); // remember to resolve
} catch (error) {
console.log("Error: " + error);
reject(error); // reject
}
}
)

let testA = fillArrayWithPromise(sendStuffB, 10);

Promise.all(
testA.map(promise => Promise.resolve(promise).catch(err => console.log(error)))
).then(function() {
console.log("End");
});

关于javascript - ES6 Promises.all() 不全部执行(promises 中没有捕获到错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56681546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com