Javascript ES6承诺错误处理

Javascript ES6承诺错误处理,javascript,ecmascript-6,Javascript,Ecmascript 6,我目前正在阅读Kyle Simpson的“YKDJS-异步与性能”,特别是第3章-承诺 作者表示,未注册拒绝处理程序的任何承诺都会收到默认承诺: let p = new Promise(function(resolve, reject) { resolve("Yay!"); }); p.then( function(val) { /* Do whatever */ } /* Default rejection handler , function(e) { throw e; } *

我目前正在阅读Kyle Simpson的“YKDJS-异步与性能”,特别是第3章-承诺

作者表示,未注册拒绝处理程序的任何承诺都会收到默认承诺:

let p = new Promise(function(resolve, reject) { resolve("Yay!"); });
p.then(
function(val) { /* Do whatever */ } 
   /* Default rejection handler
   , function(e) { throw e; } */
);
在本章后面部分,他声称
Promise
s的设计方式存在以下问题:

在任何
Promise
链中,链中最后一个
Promise
的一个处理程序函数中发生的任何错误都只是“吞没”而不是报告。 他建议更改
Promise
s的工作方式,以便任何没有拒绝处理程序的
Promise
都可以通过抛出全局错误来报告错误。然后,他提出了一个理论上的
Promise#defer()
函数,可以用于
Promise
来防止这种报告行为

现在我的问题是:这两者如何结合?确实,任何没有拒绝处理程序的
Promise
都会收到一个默认值,它只是将拒绝值作为全局错误抛出:

Promise.reject("Oops");
/* VM668:1 Uncaught (in promise) Oops */
因此,
Promise
s似乎已经按照他提议的方式工作了。 我是不是误解了什么?谢谢您的帮助。

中的

一些Promise库添加了注册某些内容的方法 类似于“全局未处理拒绝”处理程序,将调用 而不是全局抛出的错误。但他们的解决方案是如何 将错误标识为“未捕获”是指具有任意长度的计时器, 比如说3秒钟,从被拒绝的时间算起。如果承诺是 已拒绝,但在计时器触发之前未注册错误处理程序, 然后假设您永远不会注册处理程序,所以 这是“未破坏的”

在实践中,这对许多库都很有效,因为大多数使用 模式通常不要求承诺之间有明显的延迟 拒绝和对拒绝的观察

已标准化为(不使用任意计时器,但立即开火)。它确实非常有效

他还说

[当]我们没有听到这种拒绝,[…]它将是 默默地抓住它,等待将来的观察。如果你从来没有观察过它 调用
然后(…)
捕获(…)
,则它将不被处理。一些 浏览器开发人员控制台可能会检测到这些未经处理的拒绝和 报告,但这不是可靠的保证;你应该永远 遵守拒绝承诺

一些Promise库添加了注册某些内容的方法 类似于“全局未处理拒绝”处理程序,将调用 而不是全局抛出的错误。但他们的解决方案是如何 将错误标识为“未捕获”是指具有任意长度的计时器, 比如说3秒钟,从被拒绝的时间算起。如果承诺是 已拒绝,但在计时器触发之前未注册错误处理程序, 然后假设您永远不会注册处理程序,所以 这是“未破坏的”

在实践中,这对许多库都很有效,因为大多数使用 模式通常不要求承诺之间有明显的延迟 拒绝和对拒绝的观察

已标准化为(不使用任意计时器,但立即开火)。它确实非常有效

他还说

[当]我们没有听到这种拒绝,[…]它将是 默默地抓住它,等待将来的观察。如果你从来没有观察过它 调用
然后(…)
捕获(…)
,则它将不被处理。一些 浏览器开发人员控制台可能会检测到这些未经处理的拒绝和 报告,但这不是可靠的保证;你应该永远 遵守拒绝承诺


好文章。有助于理解承诺@VasylGutnyk这是如何回答这个问题的?@Bergi u可以找到关于错误处理的信息示例。@Bergi Vasyl将其作为评论而不是答案发布。他们链接到的信息可能有助于OP更好地理解承诺。好文章。有助于理解承诺@VasylGutnyk这是如何回答这个问题的?@Bergi u可以找到关于错误处理的信息示例。@Bergi Vasyl将其作为评论而不是答案发布。他们链接的信息可能有助于OP更好地理解承诺。感谢您的澄清!谢谢你的澄清!