4 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
認(rèn)為想要執(zhí)行一個(gè)動(dòng)作,等待,然后執(zhí)行另一個(gè)動(dòng)作是完全合理的。如果您習(xí)慣于使用多線程語(yǔ)言編寫(xiě),那么在線程喚醒之前,您可能會(huì)在一段時(shí)間內(nèi)執(zhí)行執(zhí)行操作。
這里的問(wèn)題是JavaScript是一個(gè)基于事件的單線程模型。雖然在特定情況下,讓整個(gè)引擎等待幾秒鐘可能會(huì)很好,但總的來(lái)說(shuō)這是不好的做法。假設(shè)我想在編寫(xiě)自己的函數(shù)時(shí)使用你的函數(shù)?當(dāng)我打電話給你的方法時(shí),我的方法都會(huì)凍結(jié)。如果JavaScript可以某種方式保留你的函數(shù)的執(zhí)行上下文,將它存儲(chǔ)在某個(gè)地方,然后將其恢復(fù)并稍后繼續(xù),然后就可以發(fā)生睡眠,但這基本上就是線程化。
因此,您幾乎堅(jiān)持其他人的建議 - 您需要將代碼分解為多個(gè)功能。
那么你的問(wèn)題是一個(gè)錯(cuò)誤的選擇。沒(méi)有辦法以你想要的方式睡覺(jué),你也不應(yīng)該尋求你建議的解決方案。

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
僅適用于debug / dev,如果它對(duì)某人有用,我會(huì)發(fā)布
有趣的東西,在Firebug(可能還有其他js控制臺(tái))中,只有在指定的睡眠時(shí)間后才會(huì)進(jìn)入,
function sleepFor( sleepDuration ){
var now = new Date().getTime();
while(new Date().getTime() < now + sleepDuration){ /* do nothing */ }
}
使用示例:
function sleepThenAct(){ sleepFor(2000); console.log("hello js sleep !"); }
添加回答
舉報(bào)