gpt4 book ai didi

javascript - 如何处理悬而未决的 promise

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:32:59 25 4
gpt4 key购买 nike

我经常想调用一个 promise 并让它异步运行而不是等待它。喜欢:

... some code ...

fetchMyCount().then(count => {
updateTheUI(count);
});

... more code ...

现在这很好用,但通常我不会在 promise 上放置一个失败处理程序,因为这对每个人来说都非常繁重。这就像在我的每个数据提取上放置一个 try {} catch {}

问题是,如果它失败了,它会默默执行。它不会抛出我的 window.onerror 可以获得的异常,它不会记录,它不会执行任何操作。

现在我可以制作一个漂亮的包装器,例如:

Async(fetchMycount().then(count => {
updateTheUI(count);
}));

这通常可以处理 promises,但我必须记住包装每个异步调用。

有没有办法让顶级处理程序像 window.onerror 或一个大的 try {} catch {} 包装器可以捕获所有未处理的-拒绝 promise ,以便我可以记录它们并确保它们得到修复?

最佳答案

这是一个常见的用例。你的问题是真实的。在 Node 中,你有 process.on("unhandledRejection", ...事件you can use .遗憾的是,这些在浏览器中尚不可用。一些libraries兼容 ES2015 promise offer them在原生 promise 获得支持之前,您可以使用它们。

好处是support in browsers is coming浏览器最终会支持这些钩子(Hook)。

目前,我已经说服了the polyfill添加它,所以如果你使用的是 core-js polyfill,你可以这样做:

window.onunhandledrejection = function(e){
// handle here e.promise e.reason
};

请注意,如果出现以下情况,则假设某事是未处理的拒绝:它未处理,并且错误处理程序未同步附加(准确地说是在任务内)。

关于javascript - 如何处理悬而未决的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com