文章 评论 浏览 29
因为async await 本身就是promise+generator的语法糖。所以await 后面的语法,我觉得肯定是作为micro task,不可能是macro task。我个人理解是这样:async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } 等价于 async function async1() { console.log('async1 start'); Promise.resolve(async2()).then(() => { console.log('async1 end'); }) }我在node和最新版本的chrome里执行的话,输出结果是script start async1 start async2 promise1 script end async1 end promise2 setTimeout 因为async1函数先执行,所以async2先加入micro task,因此async1 end先展示。这个看起来就比较合理点。目前看,不同浏览器实现不一样,没有统一的标准,不过最新的Node和chrome看样子已经修复过来了。我也是由果推因,可能我的环境不是最新的原因...
因为async await 本身就是promise+generator的语法糖。所以await 后面的语法,我觉得肯定是作为micro task,不可能是macro task。我个人理解是这样:async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } 等价于 async function async1() { console.log('async1 start'); Promise.resolve(async2()).then(() => { console.log('async1 end'); }) }我在node和最新版本的chrome里执行的话,输出结果是script start async1 start async2 promise1 script end async1 end promise2 setTimeout 因为async1函数先执行,所以async2先加入micro task,因此async1 end先展示。这个看起来就比较合理点。目前看,不同浏览器实现不一样,没有统一的标准,不过最新的Node和chrome看样子已经修复过来了。
因为async await 本身就是promise+generator的语法糖。所以await 后面的语法,我觉得肯定是作为micro task,不可能是macro task。我个人理解是这样:
async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } 等价于 async function async1() { console.log('async1 start'); Promise.resolve(async2()).then(() => { console.log('async1 end'); }) }
我在node和最新版本的chrome里执行的话,输出结果是
script start async1 start async2 promise1 script end async1 end promise2 setTimeout
因为async1函数先执行,所以async2先加入micro task,因此async1 end先展示。这个看起来就比较合理点。目前看,不同浏览器实现不一样,没有统一的标准,不过最新的Node和chrome看样子已经修复过来了。
我也是由果推因,可能我的环境不是最新的原因...
所以其实这道题没什么意义,我觉得比较正常应该是async1 end 输出在promise2 之前。我刚才用babel转译了下后,输出顺序也是这样。
文章 0 评论 0
接受
所以其实这道题没什么意义,我觉得比较正常应该是async1 end 输出在promise2 之前。我刚才用babel转译了下后,输出顺序也是这样。
第 10 题:常见异步笔试题,请写出代码的运行结果