javascript - 如何正确捕获和读取 Promise.all 调用中生成的任何错误?

标签 javascript node.js try-catch es6-promise

我目前有一个node.js/graphql微服务,它使用Promise.all通过apolloFetch调用另一个微服务。我的 Promise.all 部分似乎工作正常,但我正在尝试让错误记录部分工作。我需要确保 Promise.all 执行所有的 Promise,并且在遇到第一个错误后不会退出。一旦它执行了所有的 promise ,我就需要填充一个仅意味着错误的数组,然后我循环遍历该数组并使用另一个函数将其插入到数据库中。我目前已经设置了数组和 catch,但是当我故意生成错误时,我没有看到数组被填充。

有人可以看看我的代码是否确实做了我想要做的事情吗?

     const ErrorsArray = [];
     Promise.all(promises.map(p => apolloFetch({p}))).then((result) =>                         

          {
                resolve();
                console.log("success!");
            }).catch((e) => {
                ErrorsArray.push( e );
            });
     if( ErrorsArray && ErrorsArray.length ){
        for(a=0;a<ErrorsArray.length;a++){
          funcLogErrors( ErrorsArray[a].errorCode,         
                         ErrorsArray[a].message );
         //Not sure if these are correct^^^^^^^^^
        }
      }

PS:另外,如何在不关闭数据库的情况下模拟 mySQL 数据库错误,以便我可以测试此函数以确保所有数据库错误也被捕获?

最佳答案

您的ErrorsArray将始终包含最多一个错误。这是因为 Promise.all 要么解决所有 promise ,要么在遇到第一个错误后失败(并拒绝)。

简单地说,这里不需要数组,因为不存在出现多个异常的情况。

如果你真的想要有一个“链”之类的逻辑,你应该研究Observables。您可以使用 rxjs 将您的 Promise 转换为 Observable更具体地说是 catchErrorswitchMap运算符

关于javascript - 如何正确捕获和读取 Promise.all 调用中生成的任何错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914590/

相关文章:

c# - 第一次抛出 SocketException,但我的 catch 不起作用

c# - 错误处理整个类

perl - 如何正确使用error.pm提供的perl中的try catch?

javascript - Iframe 中的图像模糊 - 使用 CSS 或 JS 修复?

Javascript + iPhone 在对话框中打开文件

node.js - Nodejs 中的集合查找似乎没有 O(1)

node.js - 使用 Twilio、Heroku Scheduler 和 Node 发送预定文本消息 - 没有任何反应

javascript - 我无法在 node.JS 中使用 ES6 语法

javascript - 如何确定哪个 css 文件将发送给客户端

javascript - 使用 JavaScript 检查 HTML 文档中的事件元素