1、题目和答案
一道题题目:下面这段promise、async和await代码,请问控制台打印的顺序?
1 | async function async1() { |
上述,在Chrome 66和node v10中,正确输出是:
1 | script start |
2、知识点
显然,这考察的是js中的事件循环和回调队列。注意以下几点:
Promise优先于setTimeout宏任务。所以,setTimeout回调会在最后执行。Promise一旦被定义,就会立即执行。Promise的reject和resolve是异步执行的回调。所以,resolve()会被放到回调队列中,在主函数执行完和setTimeout前调用。await执行完后,会让出线程。async标记的函数会返回一个Promise对象
3、 难点
最令人困惑的,就是
async1 end在promise2之后输出
4、 猜测await表达式
1 | [return_value] = await expression; |
1 | // expression 可能被转换成如下代码 |