【问题标题】:What does await functionawait 有什么作用
【发布时间】:2023-02-26 07:52:45
【问题描述】:
这个函数在等待时发生了什么,它在任务列表中的什么位置。它在作业队列中吗?
它是如何触发的,它是排队还是已经在那里或以其他方式触发?
var lock= new Promise((resolve)=>{})
async function loop() {
while(true) {
await lock
}
}
loop()
谢谢,抱歉,我正在使用翻译器
【问题讨论】:
标签:
javascript
async-await
event-loop
【解决方案1】:
loop() 函数创建一个无限循环,等待 Promise 解决,然后再进行下一次迭代。 Promise lock 是使用 Promise 构造函数创建的,并且永远不会解析,因为 resolve 函数从未被调用过。
由于 loop() 函数是一个异步函数,它不会阻塞事件循环,可以认为是非阻塞的。当loop()被调用时,它会开始执行并进入死循环。由于 lock 是一个未解决的 Promise,循环将无限期地等待 Promise 解决。函数 loop() 是一个添加到任务队列中的任务,等待 Promise 锁解决。
如果 Promise 锁是在外部解析的,例如,通过在 Promise 上调用 resolve(),循环将继续执行。否则,loop() 函数将保留在任务队列中,等待 Promise 解决。
总而言之,loop() 函数是一个任务,它被添加到任务队列中,并会一直保留在那里,直到 Promise 锁被解析。它在调用 loop() 函数时触发,并且 Promise 锁与 Promise 构造函数一起排队。