我目前有一个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更具体地说是 catchError
和 switchMap
运算符
关于javascript - 如何正确捕获和读取 Promise.all 调用中生成的任何错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914590/