返回课程

setTimeout 中的错误

您认为 .catch 会触发吗?解释您的答案。

new Promise(function(resolve, reject) {
  setTimeout(() => {
    throw new Error("Whoops!");
  }, 1000);
}).catch(alert);

答案是:不会

new Promise(function(resolve, reject) {
  setTimeout(() => {
    throw new Error("Whoops!");
  }, 1000);
}).catch(alert);

正如本章所述,函数代码周围有一个“隐式 try..catch”。因此所有同步错误都会被处理。

但这里错误不是在执行器运行时生成的,而是在之后生成的。因此 Promise 无法处理它。