2 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
我嘗試等待一個(gè)恒定值或一個(gè)已解決的 Promise,但這似乎并沒(méi)有真正產(chǎn)生控制。
不起作用的原因是,在 Promise 解析后,下一個(gè)代碼將作為microtask排隊(duì)。當(dāng)前同步代碼堆棧完成解析后,微任務(wù)就會(huì)運(yùn)行,但在事件循環(huán)中繼續(xù)執(zhí)行下一個(gè)宏任務(wù)之前。因此,對(duì)常量或已解決的承諾的等待將產(chǎn)生其他同步代碼,但它將在那之后立即恢復(fù),而不推進(jìn)事件循環(huán)。
如果您想屈服于事件循環(huán),則需要使用 setTimeout 或 requestAnimationFrame。請(qǐng)注意,setTimeout 有一個(gè)最小時(shí)間量,因此即使您請(qǐng)求 0 毫秒,它也至少為 4 毫秒。
async function example() {
doSomeWork();
await new Promise((resolve) => setTimeout(resolve));
doMoreWork();
}

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
你可以做類似的事情
const yielder = () => new Promise((resolve) => setTimeout(() => resolve(), 0))
然后
await yielder();
添加回答
舉報(bào)