Angular Promise没有记录未捕获的异常

时间:2018-04-12 07:54:36

标签: angular exception promise angular5

我目前正在使用Angular 5.2.4。我最近意识到,承诺中的异常/错误在未被捕获时消失了。

我记得曾经是Promise在以前版本的角度上的正常行为,但现在它应该显示如下:

  

未处理的承诺拒绝:异常消息等

现在,如果我使用此代码(作为组件):

import { Component, OnInit } from "@angular/core";

@Component({
  selector: "o-test-component",
  template: "<button (click)='test()'>test button</button>",
  styles: [""]
})
export class TestComponentComponent implements OnInit {
  constructor() {}

  ngOnInit() {}

  test() {
    console.log("testing ...");
    const a = new Promise((resolve, reject) => {
      reject("rejecting a");
    });
    a.then(() => console.log("test"));
    console.log("test2");
    const m = new Promise((resolve, reject) => {
      throw new Error("throwing b");
    });
    console.log("end test");
  }
}

我明白了:

  

测试......

     

test2

     

结束测试

没有这样的&#34;未被捕获的例外&#34;单击按钮时会记录。

如果我直接在chrome控制台中复制test()方法内容,我会得到以下内容:

Unhandled Promise rejection: throwing b ; Zone: <root> ; Task: null ; Value: Error: throwing b
at Promise (<anonymous>:8:13)
at new ZoneAwarePromise (zone.js:875)
at <anonymous>:7:15 Error: throwing b
at Promise (<anonymous>:8:13)
at new ZoneAwarePromise (webpack-internal:///../../../../zone.js/dist/zone.js:875:29)
at <anonymous>:7:15

Unhandled Promise rejection: rejecting a ; Zone: <root> ; Task: Promise.then ; Value: rejecting a undefined

有关为什么组件中没有日志的任何想法?这是正常的吗?或者也许我的项目中有一些东西可以防止在promise中记录未捕获的异常?

我听说蓝鸟图书馆可以解决这个问题,但现在它不应该用于此,因为记录应该是默认行为(现在Promise是原生的)

1 个答案:

答案 0 :(得分:1)

简短回答

嗯,由于某种原因,浏览器会过滤记录错误的文件(res_array = [] bm = None while True: def process_message(msg): global count, res_array, bm res_array.append(msg['c']) return res_array def initiate(): global bm client = Client(api_key="11111111", api_secret="22222222") bm = BinanceSocketManager(client) conn_key = bm.start_symbol_ticker_socket('BNBBTC', process_message) bm.start() initiate() print(res_array) )。我后来看到了,但右下角有一个“23隐藏”。左窗格还显示创建日志的所有文件。

要解决此问题:在Chrome控制台中,右键单击 - &gt;过滤器 - &gt;取消选中已过滤的文件。

其他线索

如果您遇到问题并且这不是您的解决方案,您可以阅读问题的评论并查看以下内容:

- 检查多个浏览器。

- 检查你是否正在使用pollyfill for Promise。角度5的默认类是“ZoneAwarePromise”;使用console.log(Promise)来显示你的。

- 检查使用此stackblitz时是否显示:stackblitz.com/edit/angular-kf8qdq

- 检查你是否没有自定义错误处理程序:捕获“PromiseRejectionEvent”的东西

- 如果您使用的是core.js,则可以在ZoneAwarePromise中添加调试断点,并在zone.js中使用resolvePromise()代码,如果错误是{ {1}}数组。

- 同时检查REJECTED_NO_CATCH是否返回true(即使似乎没有调用_uncaughtPromiseErrors