分批执行承诺,即使有些失败

Executing promises in batches even if some failed

我正在尝试以 20 个为一组创建用户。我已经创建了执行此操作的函数,并将它们全部放在一个带有计数器的“promises”数组中。 当计数器达到 20 或用户总数已上传时,我执行数组中的所有承诺。 这工作正常,直到其中一个函数 returns 出现错误,这会破坏整个代码,即使它处于用户总数的循环中:

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=[];
              }
            }

即使其中一个函数 returns 出错并且捕获被激活,我如何让循环继续?

您使用了 Promise.allSettled(),它会在数组中的每个 Promise 解析或拒绝时解析。 Promise.allSettled() 本身永远不会拒绝。这意味着您可以在 Promise.allSettled() 解析后检查数组中的某些 Promise 是否被拒绝,在这种情况下在您的业务逻辑中处理它。你可以这样做:

Promise.allSettled(promises).then((responses) => {
  responses.forEach((response) => {
    if (response.status === 'fulfilled') {
      // Promise resolved
    } else {
      // Promise rejected
    }
  })
})