【发布时间】:2021-09-03 17:01:01
【问题描述】:
这是我的示例代码:
async function counter() {
console.log('1');
let next = new Promise((resolve) => {setTimeout(() => resolve(3), 5000)});
let three = await next;
console.log('2');
console.log(three)
}
counter();
this question 上接受的答案是这样说的
当你同步执行某事时,你等待它完成 在继续执行另一项任务之前。当你执行某事时 异步,您可以在完成之前继续执行另一个任务。
据我了解,2 应该立即记录到控制台,因为该函数是异步的,它不应该等待另一个任务(承诺)完成(解决)。
但是,我看到的是 2 和 3 在等待 5 秒后一起记录在控制台中。这不是基于接受答案中的上述文本的同步函数会做什么吗?
谢谢。
【问题讨论】:
-
你
awaiting 承诺在记录 2 和 3 之前解决。这就是重点。 -
accepted answer表示当代码按顺序执行时,代码会停止执行下一行,直到异步函数完成执行。完成后,它会移动到下一行 -
谢谢@brk。 :) 我仍然很困惑,这一行“当你异步执行某事时,你可以在它完成之前继续执行另一个任务。”。似乎与停止执行下一行相反。
-
@RealNoob 所以在
let next = …;和let three = await next;语句之间添加一些其他代码。或者也紧跟在counter();语句之后。
标签: javascript asynchronous async-await es6-promise