并行承诺的自定义错误处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并行承诺的自定义错误处理相关的知识,希望对你有一定的参考价值。
我有一组要通过Promise.all
并行执行的承诺。我也想忽略错误,如果有的话,通过:
Promise.all(promises.map(p => p.catch(() => undefined)));
我试图了解undefined
的返回在这里有何帮助(我可以返回错误吗?)。如果我想要基于状态码的更多自定义逻辑,是否可以进行以下工作?
Promise.all(promises.map(p => p.catch(error => {
if (error.statusCode === 400) return error;
throw error;
})));
我只想忽略状态码为400的那些错误,但保留其他所有内容的原始行为。
答案
您的处理方式:
const results = await Promise.all(promises.map(p => p.catch(error => {
if (error.statusCode === 400) return error;
throw error;
})));
...将正常工作,只要使用results
的代码知道它将接收结果和错误对象的混合。版本:
const results = await Promise.all(promises.map(p => p.catch(() => undefined)));
...导致每种错误情况下results
数组的值均为undefined
。您要做什么取决于您希望结果看起来像什么。
另一答案
是的,这应该有效。 catch(fn)
的语义是:
- 如果
fn
返回一个值,则使用该值解决承诺。 (除非返回的值本身就是被拒绝的承诺,但是这里不是这种情况。) - 如果
fn
引发异常,则该诺言将被该异常拒绝。
如果从catch
处理程序返回错误,则Promise.all
可能会返回包含成功值和错误的数组。
以上是关于并行承诺的自定义错误处理的主要内容,如果未能解决你的问题,请参考以下文章
ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项