【发布时间】:2020-01-07 11:51:36
【问题描述】:
假设我有一个函数foo,它返回一个承诺。有没有办法调用该函数,并且只有在拒绝未处理的情况下才可以选择Promise.prototype.catch 结果?我想要一个适用于 node.js 和浏览器的解决方案。例如:
const fooResult = foo();
// pass fooResult somewhere else where fooResult may be caught with catch
catchIfUncaught(fooResult, (err) => {
console.log(err); // should be foo rejection only if the rejection is not caught elsewhere
// no unhandled rejection occurs
});
【问题讨论】:
-
请问跨环境是什么意思?如果您已经确定了您的代码无法运行的特定环境,那么具体说明它是什么以及该环境中出了什么问题是有意义的
-
我的意思是在 node.js 和浏览器中。我知道在这两种环境中都有全局未处理的拒绝事件,并且希望有一个在这两种环境中都有效的解决方案。
-
我更新了示例,以便将
fooResult传递到其他地方。我希望 catchIfUncaught 处理程序仅在fooResult从未被捕获时运行。 -
如果一个catch块没有返回一个被拒绝的promise(也没有抛出一个错误),后续的catch块将不会被调用。
-
@sp00m 我们如何确定
catch调用的顺序?它是基于执行顺序吗?您还可以指出规范中说明情况的部分吗?
标签: javascript node.js promise es6-promise