【发布时间】:2018-10-15 19:31:33
【问题描述】:
深入研究 Promises,我发现了一些让我困惑的东西。然而,我意识到发生了什么,并决定在这里分享给可能遇到它的其他人。
我有以下 JavaScript:
new Promise(function (resolve, reject) {
foo();
setTimeout(function () {
resolve();
}, 400);
}).catch(function (err) {
console.log('Caught it:', err.message);
});
当我运行它时,我得到:
抓住它:foo 没有定义
这是预期的结果。但是,如果我尝试像这样在setTimeout 回调中调用foo():
new Promise(function (resolve, reject) {
setTimeout(function () {
foo();
resolve();
}, 400);
}).catch(function (err) {
console.log('Caught it:', err.message);
});
我明白了:
ReferenceError: foo is not defined at Timeout._onTimeout (C:\Users\Hristiyan\Desktop\promise.js:3:13) at tryOnTimeout (timers.js:224:11) at Timer.listOnTimeout (timers.js:198:5)
问题:为什么我没有得到相同的结果?为什么用catch() 定义的处理程序不处理错误?我的意思是,错误发生在同一个代码块下?
【问题讨论】:
-
"错误出现在同一个代码块下?" - 不,传给
new Promise的回调和传给setTimout的回调是两个不同的函数跨度> -
同意。我的意思是它视觉上在同一个代码块中,这误导了我。不久之后,我记得“视觉上”没有任何意义。
标签: javascript exception promise