Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 批量执行承诺,即使某些承诺失败_Node.js_For Loop_Promise - Fatal编程技术网

Node.js 批量执行承诺,即使某些承诺失败

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)

我正在尝试创建一批20个用户。我创建了一些函数来实现这一点,并将它们全部放在一个带有计数器的数组“promises”中。 当计数器达到20或已上载用户总数时,我将执行阵列中的所有承诺。 这可以正常工作,直到其中一个函数返回一个错误,该错误会破坏整个代码,即使它处于用户总数的循环中:

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
    }
  })
})

谢谢因此,实际上,它不会去抓,而是用我在“其他”部分中的任何内容来处理被拒绝的承诺?是的。你可以随心所欲。