【发布时间】:2020-10-05 21:16:25
【问题描述】:
我有以下代码:
var incr = num => new Promise(resolve => {
resolve(num + 1);
});
var x = incr(3)
.then(resp => incr(resp))
.then(resp => console.log(resp));
async function incrTwice(num) {
const first = await incr(num);
const twice = await incr(first);
console.log(twice);
}
incrTwice(6);
我认为(也许是错误地)展示了实现相同功能的两种等效方法:第一种是链接 promise,第二种是使用 async/await 的语法糖。
我希望承诺链解决方案首先到 console.log,然后是异步函数,但是异步函数 console.log 首先是承诺链解决方案。
我的逻辑如下:
-
xs 在处理声明时,初始解析将首先出现在微任务队列中 -
x和incrTwice声明之间的堆栈为空,这将导致微任务队列被刷新(导致承诺链完成)- x 先打印
-
incrTwice已定义 -
incrTwice在awaits 的微任务队列上执行排队,最终打印到控制台- incrTwice 打印第二次
显然我在某个地方有误会,有人能指出我错在哪里吗?
【问题讨论】:
标签: javascript promise async-await es6-promise