2013-05-18 34 views
43

Tôi muốn ngừng thực hiện trong 2 giây. Vì vậy, là thế này, nhưng bây giờ sau một khối mã: HW 10,12 Cách tạm dừng thực thi mã javascript trong 2 giây

for (var i = 1; i <=5; i++) 
{ 
document.write(i); 
sleep(2);//for the first time loop is excute and sleep for 2 seconds   
}; 

</script> 
</head> 
<body> 
</body> 
</html> 

Đối với vòng lặp lần đầu tiên được thực thi và ngủ trong 2 giây. Tôi muốn ngừng thực hiện trong hai giây?

+0

for (var i = 1; i <= 5; i ++) { \t \t \t document.write (i); \t \t ngủ (4); \t \t \t \t \t } –

+0

Tại sao bạn muốn tạm dừng thực hiện cho hai người, hoặc bất kỳ số lượng, giây? –

+1

Bạn có thể chỉnh sửa câu hỏi của mình để sửa mã nguồn. – knuton

Trả lời

14

Bạn có thể sử dụng setTimeout để làm điều này

function myFunction() 
    { 
    // your code 

    // stop for sometime if needed 
    setTimeout(myFunction, 5000); 
    } 
39

Không có (an toàn) cách để tạm dừng thực hiện. Bạn có thể, tuy nhiên, làm điều gì đó như thế này sử dụng setTimeout:

function writeNext(i) 
{ 
    document.write(i); 

    if(i == 5) 
     return; 

    setTimeout(function() 
    { 
     writeNext(i + 1); 

    }, 2000); 
} 

writeNext(1); 
+13

Tại sao bạn nên downvote? –

+4

Tại sao document.write() nó sẽ vít lên DOM –

+33

@ManuViswam Nó không phải là document.write của tôi, đó là mã từ câu hỏi. –

2

This Link có thể hữu ích cho bạn.

Mỗi lần tôi muốn ngủ ở giữa chức năng của mình, tôi đã cấu trúc lại để sử dụng setTimeout().

2

Không có cách nào để ngừng thực thi mã của bạn như bạn sẽ làm với ngôn ngữ thủ tục. Bạn thay vì có thể tận dụng setTimeout và một số thủ đoạn gian trá để có được một thời gian chờ parametrized:

for (var i = 1; i <= 5; i++) { 
    var tick = function(i) { 
     return function() { 
      console.log(i); 
     } 
    }; 
    setTimeout(tick(i), 500 * i); 
} 

Demo đây: http://jsfiddle.net/hW7Ch/

84

Javascript là đơn luồng, vì vậy về bản chất không phải là một chức năng ngủ vì ngủ sẽ chặn chuỗi. setTimeout là một cách để giải quyết vấn đề này bằng cách đăng sự kiện lên hàng đợi để thực hiện sau mà không chặn luồng. Nhưng nếu bạn muốn có một chức năng ngủ đúng, bạn có thể viết một cái gì đó như thế này:

function sleep(miliseconds) { 
    var currentTime = new Date().getTime(); 

    while (currentTime + miliseconds >= new Date().getTime()) { 
    } 
} 
+2

** DONT LIKE RATNG !!! ** Điều đó gây ra việc đóng băng WHOLE TAB (cũng là các tab khác bị ảnh hưởng) trong suốt thời gian đó, vì lệnh 'while' đang được thực hiện không giới hạn bởi CPU, gây đóng băng. Xem ví dụ thực tế - https://jsfiddle.net/mn6yagqx/ (tự kiểm tra) –

+0

@ T.Todua: Đó là lý do tại sao bài đăng không đề xuất. Đây chỉ là giải pháp trong trường hợp mọi người vẫn muốn làm điều đó –

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