2011-11-15 27 views
20

Nếu tôi có chức năng tôi muốn mã js của mình chạy ngay lập tức nhưng sau khi chạy, chờ 2 giây. Làm thế nào để đạt được logic này?Cách đợi một khoảng thời gian sau khi chức năng chạy

(Lưu ý: Nó chỉ là logic nghịch đảo so sánh với setTimeout(), vì setTimeout() đầu tiên phải đợi một khoảng thời gian nhất định sau đó thực hiện các chức năng)

+0

Bạn có thể vui lòng cung cấp một vài dòng mã của mình không? Tôi nghĩ bạn đang tìm kiếm .delay() nhưng không chắc chắn bây giờ. –

+0

Vâng, tôi đoán bạn phải đợi 2 giây trước khi làm điều gì khác. Sử dụng setTimeout() cho rằng cái gì khác sau đó, sau khi bạn thực hiện chức năng của bạn ;-) –

+0

có vẻ như bạn muốn chờ 2s trước khi bạn quay trở lại chức năng gọi. nếu có, sau đó trước khi trở về sử dụng setTimeout() – Rohan

Trả lời

34

Chỉ cần đặt mã của bạn bên trong một chức năng ẩn danh thông qua với setTimeout.

ví dụ:

functionToRunFirst(); 
setTimeout(function() { 
    // rest of code here 
}, 2000); 
2

gì "chờ 2 giây" có ý nghĩa.? bạn có nghĩa là bạn muốn chặn trở lại từ chức năng trong 2 giây?

nếu có, bạn không thể làm điều đó. không có hàm sleep() trong JavaScript.

bạn sẽ phải chỉ cần sử dụng setTimeout()

3

sử dụng setTimeout là một cách để làm điều đó

function run() {  
    // run this code 

    setTimeout(afterTwoSeconds, 2000);  
} 

function afterTwoSeconds() {  
    // run this code two seconds after executing run. 
} 

// call run 
run(); 
1

Không có gì sai với câu trả lời ở trên, nhưng theo một cách khác là:

$("#somethingThatDoesntExist").fadeTo(2000, 1, function() { 
    // two seconds later 
}); 
+1

Đó là khá hackish của bạn. Tại sao không '.delay()' nếu jquery là sự lựa chọn của bạn? –

+0

Vì tôi không biết về .delay(), cảm ơn! Tôi cũng nghĩ rằng OP đề cập đến jQuery, nhưng tôi có vẻ là sai. –

+0

Ông đã gắn thẻ câu hỏi của mình jquery. –

6

Tôi nghĩ rằng những gì bạn đang tìm kiếm là một phương pháp để đình chỉ việc thực thi mã cho đến khi hết thời gian chờ. Nhiều lập trình viên nghiệp dư mong muốn một cấu trúc như vậy, nhưng nó không tồn tại trong JavaScript. Nó không cần thiết. Đối với tất cả các mục đích trong JavaScript setTimeoutsetInterval là các giải pháp ứng viên hoàn hảo.

Tuy nhiên, JavaScript là một ngôn ngữ mạnh mẽ. Bạn có thể xây dựng cấu trúc của riêng mình để giải quyết vấn đề này. Hãy xem số blog post của Neil Mix. Với cách tiếp cận của mình, bạn có thể tạo chức năng ngủ có thể được sử dụng dọc theo các dòng sau (lưu ý rằng hiện tại chỉ Firefox hỗ trợ JavaScript 1.7):

function mainGeneratorFunction() { 
    functionToRunFirst(); 
    yield sleep(2000); 
    //rest of the code 
} 

Tuy nhiên, đối với các trình duyệt khác không tuyệt vọng. Bạn có thể sử dụng một hack được gọi là XHR Sleeping. Trong cách tiếp cận này, bạn chỉ cần sử dụng một số XMLHttpRequest đồng bộ để gọi một kịch bản lệnh phía máy chủ như php, sau đó ngủ trong một khoảng thời gian xác định và trả về sau khi nó thức dậy. Mã JavaScript như sau:

function sleep(microseconds) { 
    var request = new XMLHttpRequest(); 
    request.open("GET", "sleep.php?time=" + microseconds, false); 
    request.send(); 
} 

functionToRunFirst(); 
sleep(2000000); 
//rest of the code 

Các php function giấc ngủ là như sau:

<?php 
    usleep($_GET["time"]); 
?> 
1

đưa ra một số cách điền vào từ phía bạn, điều này sẽ chạy 5 lần với một nửa giờ thứ hai

var counter = 0; 
var arrayOfPicture = []; //fill this out 

function gifSimulator() { 

    //use the counter as an index in the array, and change the image source of your element with that. 


    if (counter < 5) { 

     setTimeout(function() { 

      counter++; 

      gifSimlulator(); 

     }, 500); //lets wait half a second 
    } 
} 
0

Tôi không biết tại sao các bạn lại làm được điều này nhiều. Tôi tin rằng chúng ta có thể làm điều đó bằng cách sử dụng đối tượng Date. Lấy giá trị ngày đầu tiên và sử dụng hàm setInterval để đợi cho đến khi chúng ta nhận được khoảng thời gian xác định (lấy ngày mới và kiểm tra sự khác biệt). Khi chúng tôi nhận được rằng đặt lại chức năng khoảng thời gian và tiến hành với mã của bạn sau đó có thể chạy.

Các vấn đề liên quan