4 回答

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

TA貢獻1946條經驗 獲得超4個贊
僅適用于debug / dev,如果它對某人有用,我會發(fā)布
有趣的東西,在Firebug(可能還有其他js控制臺)中,只有在指定的睡眠時間后才會進入,
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 !"); }
添加回答
舉報