2013-03-29 20 views
10

Bir javascript 'wait' işlevi oluşturmak istiyorum. neleri değiştirmeliyim?Javascript wait() işlevi

function wait(waitsecs){ 
setTimeout(donothing(), 'waitsecs'); 
} 

function donothing() { 

} 
+0

Muhtemelen setTimeout (donothing(), waitsecs) anlamına geliyordu; ancak bunun ne olduğunu göremiyorum. 'setTimeout' engellemez ve siz bir spin-wait yaratmamalısınız. http://stackoverflow.com/q/951021/139010 –

+0

Daha iyi bir soru * neden * bekleme fonksiyonuna sahip olmak istersiniz? –

+0

Bu kod derhal * * * * demeyi çağırır ve bir parametrenin değerini değil, bir dizgeyi geçirir. setTimeout (donits, waitsecs) 'ın daha iyi bir girişimi olacaktır .. aptal bir sarıcı. –

cevap

38

Javascript iş parçacığı değil, bu nedenle "bekle", tüm sayfayı dondurabilir (ve muhtemelen tarayıcının komut dosyasını çalıştırmayı durdurmasına neden olabilir).

özel olarak sorunu çözmek için, setTimeout çağrısında donothing sonra parantez kaldırmak ve bir sayı değil bir dize waitsecs yapmalıdır:

console.log('before'); 
setTimeout(donothing,500); // run donothing after 0.5 seconds 
console.log('after'); 

Ama bu yürütülmesine durmayacak; İşlevinizden önce "sonra" kaydedilir.

Anonim işlevleri kullanabilirsiniz, düzgün beklemek için:

console.log('before'); 
setTimeout(function(){ 
    console.log('after'); 
},500); 

Bütün değişkenler hala "sonra" bölümünde olacak. Bunları zincirlememelisiniz - eğer kendinize ihtiyaç duyuyorsanız, programı nasıl yapılandırdığınıza bakmanız gerekir. Ayrıca, döngü gerekiyorsa setInterval/clearInterval'u kullanmak isteyebilirsiniz.

+1

Ne basit bir kod! :) –

4

Düzenlemek olmamalı, bu siteyi tümüyle iptal etmelidir.

Belirli bir süre boyunca yürütmeyi durdurma girişimi, tarayıcıyı kilitleyecek ve Yanıt Vermiyor durumuna getirecektir. Yapabileceğiniz tek şey, setTimeout'u doğru kullanmaktır.

+0

+1 bu daha iyi bir yanıttır. – Sajmon

+14

Sanırım [Dave'in cevabı] (http://stackoverflow.com/a/15694534/53926) daha iyi. Daha az snark daha gerçek tavsiye. – Xavi