javascript - Javascript 异步函数如何在特定点显式产生控制?
问题描述
在 Javascript 异步函数中,有没有办法在代码中的特定点对事件循环产生控制?例如:
async function example() {
doSomeWork();
... // Yield control to the event loop here
doMoreWork();
}
我尝试await
了一个常量值或一个已解决的Promise
,但这似乎并没有真正产生控制。
解决方案
我尝试等待一个常量值或一个已解决的 Promise,但这似乎并没有真正产生控制权。
不起作用的原因是,在 promise 解决后,下一个代码将作为microtask排队。一旦当前的同步代码堆栈完成解析,微任务就会运行,但在继续事件循环中的下一个宏任务之前。因此,等待一个常量或已解决的承诺将让步给其他同步代码,但它会在此之后立即恢复,而不推进事件循环。
如果你想屈服于事件循环,你需要使用 setTimeout 或 requestAnimationFrame。请注意,setTimeout 有一个最短时间,因此即使您请求 0 毫秒,它也至少是 4 毫秒。
async function example() {
doSomeWork();
await new Promise((resolve) => setTimeout(resolve));
doMoreWork();
}
推荐阅读
- xslt - XSLT 1.0:根据条件删除 ITEM
- jenkins - 无法在 Windows 上安装 Jenkins
- code-generation - Roslyn 的 SyntaxReceiver - 获取类实现接口
- html - 无法使用tailwindcss垂直增加高度
- reactjs - 列表中的每个孩子在使用 uuid 时都应该有一个唯一的“key”道具
- python - 通过 Socket 推送实时更新
- amazon-web-services - Amazon DynamoDB - 向客户端添加“httpOptions”
- php - 如何在php中的某个点将字符插入字符串?
- pandas - 熊猫数据框中列中行元素的转换
- deep-learning - PyTorch 层的输入和输出