【发布时间】:2020-01-29 03:33:59
【问题描述】:
检查这个:https://javascript.info/microtask-queue 第一行说
promise 处理程序 .then/.catch/.finally 始终是异步的
但它们总是按顺序执行。只有当它在中间失败时它才会跳起来捕捉。那它怎么是异步的呢?
【问题讨论】:
-
他们并不总是这样。
let x = 1; new Promise(r => r(x)).then(console.log); x = 2;打印1但如果它始终是异步的,则会打印2。 -
@Reactgular 所以你的意思是说这是他们的错误?
-
简答;不,并非总是如此。长答案:由于事件循环的性质,无法保证。您可以在 You Don't Know JS 中阅读更多信息 - 滚动到事件循环部分。
-
@Reactgular 等等。为什么将处理程序的代码与承诺下方的代码进行比较?即使在文章中,他们也给出了类似的例子。但是该语句似乎对处理程序之外的代码没有任何作用
-
运行
let x = 1; new Promise(r => r(x)).then(console.log); x = 2;具有误导性。您只是在证明 Promise 工厂方法中的代码是同步运行的。但问题是关于 then 延续回调何时运行。运行x = 4; new Promise(r => r(x)).then(() => console.log(x)); x = 5;,你会看到它打印出5,表明延续回调是异步的。
标签: javascript asynchronous async-await es6-promise