- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我经常想调用一个 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/
在账户 A 中,我使用 cloudformation 创建了一个 s3 存储桶,CodeBuild 构建了一个工件并上传到该存储桶。在账户 B 中,我尝试使用 cloudformation 创建堆栈,
我是一名优秀的程序员,十分优秀!