我目前有一个使用Promise.all通过apolloFetch调用另一个微服务的node.js / graphql微服务。我的Promise.all部分似乎工作正常,但我正在尝试使错误记录部分正常工作。我需要确保Promise.all执行所有承诺,并且在遇到第一个错误后不会退出。一旦执行了所有的承诺,我就需要填充一个仅表示错误的数组,然后遍历并使用另一个函数将其插入数据库。目前,我已经设置了数组和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数据库错误,所以我可以测试此功能以确保同时捕获所有数据库错误?
答案 0 :(得分:1)
您的ErrorsArray
将始终包含最多一个错误。这是因为Promise.all
要么解决所有承诺,要么在遇到第一个错误后失败(并拒绝)。
简而言之,这里不需要数组,因为在任何情况下都不会出现多个异常。
如果您真的想拥有“链” 之类的逻辑,则应研究 Observables 。您可以使用rxjs将Promise
转换为Observable
,更具体地说,可以使用catchError
和switchMap
运算符