亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript 異步函數如何在特定點顯式地產生控制?

Javascript 異步函數如何在特定點顯式地產生控制?

繁花如伊 2023-07-29 15:50:08
在 Javascript 異步函數中,有沒有辦法在代碼中的特定點對事件循環進行控制?例如:async function example() {    doSomeWork();    ...  // Yield control to the event loop here    doMoreWork();}我嘗試await使用常量值或resolved Promise,但這似乎并沒有真正產生控制。
查看完整描述

2 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

我嘗試等待一個恒定值或一個已解決的 Promise,但這似乎并沒有真正產生控制。


不起作用的原因是,在 Promise 解析后,下一個代碼將作為microtask排隊。當前同步代碼堆棧完成解析后,微任務就會運行,但在事件循環中繼續執行下一個宏任務之前。因此,對常量或已解決的承諾的等待將產生其他同步代碼,但它將在那之后立即恢復,而不推進事件循環。


如果您想屈服于事件循環,則需要使用 setTimeout 或 requestAnimationFrame。請注意,setTimeout 有一個最小時間量,因此即使您請求 0 毫秒,它也至少為 4 毫秒。


async function example() {

  doSomeWork();

  await new Promise((resolve) => setTimeout(resolve));

  doMoreWork();

}


查看完整回答
反對 回復 2023-07-29
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

你可以做類似的事情

const yielder = () => new Promise((resolve) => setTimeout(() => resolve(), 0))

然后

await yielder();


查看完整回答
反對 回復 2023-07-29
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號