我目前正在使用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是原生的)
答案 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
)