Node.js 批量执行承诺,即使某些承诺失败
我正在尝试创建一批20个用户。我创建了一些函数来实现这一点,并将它们全部放在一个带有计数器的数组“promises”中。 当计数器达到20或已上载用户总数时,我将执行阵列中的所有承诺。 这可以正常工作,直到其中一个函数返回一个错误,该错误会破坏整个代码,即使它处于用户总数的循环中:Node.js 批量执行承诺,即使某些承诺失败,node.js,for-loop,promise,Node.js,For Loop,Promise,我正在尝试创建一批20个用户。我创建了一些函数来实现这一点,并将它们全部放在一个带有计数器的数组“promises”中。 当计数器达到20或已上载用户总数时,我将执行阵列中的所有承诺。 这可以正常工作,直到其中一个函数返回一个错误,该错误会破坏整个代码,即使它处于用户总数的循环中: for (const user of usersjson.users) { {functions} if (promises.length == 20 || i == usersjson.users.length)
for (const user of usersjson.users) {
{functions}
if (promises.length == 20 || i == usersjson.users.length) {
await Promise.allSettled(promises)
.then((responses)=> {
for (const response of responses) {
if (response.value.status == 204) {
console.log(`${response.value.status}: User ${response.value.request.path.substring(7)} was updated.`);
} else {
if (response.value.status == 201 && response.value.headers.location) {
console.log(`${response.value.status}: User ${response.value.headers['location']} was created.`);
} else {
console.log(response.value.headers.location);
}
}
}
}).catch((err)=> {
console.log(err);
});
promises=[];
}
}
即使其中一个函数返回错误并且catch被激活,我如何使循环继续?您使用了
Promise.allsolided()
,它将在数组中的每个Promise解析或拒绝时解析。Promise.allsolited()
本身永远不会拒绝。这意味着您可以在Promise.allsolited()
解析后检查数组中的某些承诺是否已被拒绝,在这种情况下,您可以在业务逻辑中处理它。您可以这样做:
Promise.allSettled(promises).then((responses) => {
responses.forEach((response) => {
if (response.status === 'fulfilled') {
// Promise resolved
} else {
// Promise rejected
}
})
})
谢谢因此,实际上,它不会去抓,而是用我在“其他”部分中的任何内容来处理被拒绝的承诺?是的。你可以随心所欲。