所有這些setTimeout答案在這裏不起作用!在JavaScript中睡眠 - 沒有setTimeout
我只是想等兩個功能之間的幾秒鐘,像這樣:
do_fn1();
wait(5000);
do_fn2();
所有這些setTimeout答案在這裏不起作用!在JavaScript中睡眠 - 沒有setTimeout
我只是想等兩個功能之間的幾秒鐘,像這樣:
do_fn1();
wait(5000);
do_fn2();
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
說,他們都不要沒有工作的例子是大通話,因爲我敢肯定,他們可能會做。
這個怎麼樣,
do_fn1();
setTimeout(do_fn2, 5000);
我不認爲你可以。你可能不得不
do_fn1();
window.setTimeout(do_fn2, 5000);
但我不想傳遞第二個函數作爲參數。我有更多的功能跟在它之後,並且我希望每一個延遲.. – Frodo
只需將它們全部包裝在一個新功能中。 –
@Frodo - 在包裝函數中包裝所有「延遲」函數以傳入setTimeout。 –
所有這些setTimeout的答案在這裏不起作用!
當然,他們這樣做:
function a() {
alert("I'm pretty sure...");
}
function b() {
alert("...that they work just fine.");
}
a();
setTimeout(b, 5000);
我剛剛意識到,我可以使用警報,而不是睡覺 – Frodo
兩個想法:
首先,爲什麼不換了所有的後延遲語句組合成包裝功能
var postDelayFunc = function(){
dosomething();
dosomethingelse();
onemorething();
}
然後在您的代碼中將此函數作爲參數傳遞給setTimeout。
//your code
dofunc1();
setTimeout(postDelayFunc, 1000);
或者看看jQuery的延期:http://msdn.microsoft.com/en-us/scriptjunkie/gg723713,雖然你可能會寫出來非常相似的代碼。
有一件事讓我感到,雖然你對其他答案的反應,可能出現混亂的地方。我認爲你正在看你的功能,並看到一個單一的線程,你只是想繼續前進一段時間。
你不應該這樣做,儘管在JavaScript中,因爲它綁定了整個瀏覽器,並會惹惱用戶。相反,當你使用setTimeout時,你實際上正在做什麼,表明當超時到期時,另一個線程將接收並執行傳入函數。
一旦設置了超時,正在執行的線程將繼續下一行(這就是爲什麼你認爲超時不起作用)。您可能需要做的是設置超時,並將所有執行後的步驟放入交給定時器的函數中,如上所述。
另一個黑客我可能會使用,但是我個人不會推薦它。
退房這裏http://jsfiddle.net/S6Ks8/1/
function parseSleeps(func){
var fdef = func.toString();
var fbody = fdef.match(/\{([\s\S]*)\}/)[1].split(/sleep\(.*?\)\;?/);
var sleeps = fdef.match(/sleep\((.*?)\)/g);
var fargs = fdef.match(/\(([\s\S]*?)\)/)[1];
var fbodyNew = [];
var times = [];
fbodyNew.push(fbody.shift(), '\n');
for(var i = 0; sleeps && i < sleeps.length; i++){
var sec = sleeps[i].match(/\d+/)[0];
times.push(sec);
fbodyNew.push('setTimeout(function(){\n');
fbodyNew.push(fbody.shift(), '\n');
}
while(times.length){
var sec = times.pop();
fbodyNew.push('}, ', sec, ');\n');
}
return new Function(fargs, fbodyNew.join(''));
}
// Your code from here
function a(str1, str2){
alert(str1);
sleep(3000);
alert(str2);
}
var func = parseSleeps(a);
func('here', 'there');
最明智的方法是有一些像
function a() {
// Do stuff
setTimeout(b, 42)
}
function b() {
// Do other stuff delayed
}
決不「塊」中的JS任何帖子 - 如果你認爲你需要做的有肯定是一個「更乾淨「的方式來實現您的目標。
說'setTimeout'不起作用,同時發佈'setTimeout'將是絕對完美的例子似乎有點反作用(因此所有的答案只是告訴你使用它)。也許你應該改善你的問題,以確切顯示你需要做什麼,爲什麼你不能用'setTimeout'來做? –
不@AndyE,他不是在說使用'setTimeout'。 OP想暫停一段時間的執行而不放棄執行回DOM,就像'setTimeout'一樣。 – WebWanderer