【问题标题】:How does Angular's $q differ from the Promises/A+ spec?Angular 的 $q 与 Promises/A+ 规范有何不同?
【发布时间】:2016-10-05 02:43:31
【问题描述】:

在编写测试时,我最近被 Angular $q 在then 块中抛出异常的行为刺痛了:(jsfiddle)

 const r = $q.reject(new Error());
 r.then(null, () => {
   throw new Error();
 }).then(null, () => {
   // This does not get run!
   // Instead, an exception is thrown on the event loop somewhere
 });

我曾假设 $q 遵守 Promises/A+,但看起来情况并非如此。 (Promises/A+ 2.2.7.2)

$q 和 Promises/A+ 之间还有哪些不同之处?

【问题讨论】:

  • Nate_Rook。当然看起来最终的错误处理程序应该运行。你能提供一个它不工作的演示吗?
  • @Roamer-1888 - 当然,我刚刚修复了 jsfiddle 链接。 (我对 jsfiddle 上的“保存本地草稿”功能感到困惑 :()
  • @NateRook,因为它似乎是关键,您可以编辑问题以指示代码在测试中执行,并添加“jasmine”标签。
  • @Roamer-1888 好电话。看起来罪魁祸首是角模拟,而不是茉莉花,并且没有标签,所以我刚刚在问题中提到了相关上下文:它正在测试中。

标签: angularjs promise angular-promise


【解决方案1】:

Angular $q 是 Promises/A+ 兼容的; Promises/A+ 合规性测试是 Angular 持续构建的一部分。

我在问题中描述的行为是misfeature。 Promises/A+ 在技术上没有描述$exceptionHandler 的行为,因此它不会破坏合规性,但它确实使这些案例无法测试。 Angular 团队计划在 1.6 中删除它。

感谢@Phil 为我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 2015-06-20
    • 2014-06-17
    • 2018-04-05
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多