承诺链中可能会出现两类错误 .
-
从promise链中抛出的错误(由
.catch
处理) -
配置promise链时抛出错误
我的问题是如何最好地处理后者 .
例如,在下面的 .catch
中,它不会捕获 foo
在有机会返回promise之前抛出的异常 .
function go() {
return foo()
.then(bar)
.catch(bam);
}
显然,我可以将 go
的内容包装在 try-catch
块中 .
但是,将 foo
中的catch块立即拒绝的承诺返回到"maintain the API"并且为所有可能性设置基于承诺的界面会更好吗?
4 回答
或者你可以更明确地做:
然后用
现在,您无需更改
foo
的所有用法 .或者,您可以在链中包含
foo
,就像这样现在,即使
foo
抛出,bam
也会照顾它 .或者,在
foo
上构建一个包装器,然后使用它,而不是
foo
,就像这样你可以宣传
foo
,以便在foo
内自动发生任何错误触发拒绝功能 . 如;使用建议的(阶段3)
async
函数 . 它们保证返回一个promise,因此您不必担心在设置promise链时捕获同步异常 .