Promise 你需要知道的几点
-
创建 Promise 时(即 new Promise…),内部同步代码会立即执行,异步代码会在次轮事件循环执行
-
try…catch 无法抓取 异步任务 错误, 因为 try…catch 代码在主线程,异步任务在工作线程,在执行异步任务时主代码同步任务try…catch 都已经执行完了
-
Promise.reject(new Error(‘xxx’)) 或 Promise.reject(‘xxxx’) reject 其实是返回
错误信息
的回调方法,它并不是throw
出一个错误到主线程,所以不会终止主线程, 当异步任务有throw error
或代码执行报错
那么这个异步任务的结果就是抛出异常,主线程 loop 到该结果时就会终止// 该异步任务结果就是抛出错误, try..catch 也是抓不到的,try..catch 在同步代码中已执行完,而异步任务才开始 setTimeout(() => { t