2013-06-01 56 views
11

Tôi có tệp javascript và ở một số nơi tôi muốn thêm độ trễ nhỏ, vì vậy tập lệnh sẽ đạt đến điểm đó, đợi 3 giây và sau đó tiếp tục với phần còn lại của mã. Cách tốt nhất mà tôi nghĩ là làm một chức năng mà tôi có thể gọi từ bất cứ đâu trong kịch bản.Cách tạo chức năng trì hoãn javascript

function startDelay(lengthOfDelay) 
{ 
//code to make it delay for lengthOfDelay amount of time 
} 

Tuy nhiên, tôi không thể tìm thấy bất kỳ cách nào để triển khai mã để chờ. Tôi đã có một cái nhìn tại setTimeout, nhưng bạn cần phải mã cứng các chức năng vào nó, mà làm cho nó không tốt cho tôi.

Có cách nào để tôi có thể tạm dừng tập lệnh trong một vài giây không? Tôi không gặp vấn đề gì với việc đóng băng giao diện người dùng trong khi mã bị tạm dừng.

Nếu không, có cách nào để tôi có thể sử dụng PHP ngủ() để đạt được điều này không? (Tôi biết rằng PHP là phía máy chủ và Javascript là phía máy khách, nhưng có thể có một cách mà tôi chưa từng nghe đến.)

+2

Cách đơn giản nhất là sử dụng [setTimeout] (https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout) và để làm phần còn lại của mã trong hàm bạn cung cấp để setTimeout. –

+1

http://stackoverflow.com/questions/10312963/javascript-settimeout – smerny

Trả lời

30

Bạn không cần sử dụng chức năng ẩn danh với setTimeout. Bạn có thể làm điều gì đó như sau:

setTimeout(doSomething, 3000); 

function doSomething() { 
    //do whatever you want here 
} 
+0

Làm cách nào để tạo một hàm như startDelay (lengthOfDelay) mà tôi có thể gọi từ ** anywhere ** trong tập lệnh và thực hiện phần còn lại của hàm sau đó, không chỉ _ // làm bất cứ điều gì bạn muốn ở đây_? – user2370460

+0

Tôi không thực sự chắc chắn những gì bạn muốn làm chính xác. Bạn có muốn tạm dừng việc thực hiện trang hoặc lên lịch một hàm sẽ thực thi sau khi trì hoãn không? – Kassem

+0

@Kassem Tôi nghĩ (s), ông có nghĩa là ví dụ: nếu bạn muốn console.log một tin nhắn mỗi giây bằng cách sử dụng một vòng lặp for? tức là 'while (true) {[một hàm chậm trễ, kết hợp với console.log]}' Tôi không nghĩ rằng hàm của bạn sẽ chạy tuần tự. – geotheory

2

Ah yes. Chào mừng bạn đến với việc thực thi Không đồng bộ.

Về cơ bản, tạm dừng tập lệnh sẽ khiến trình duyệt và trang trở nên không phản hồi trong 3 giây. Điều này thật khủng khiếp đối với các ứng dụng web và do đó không được hỗ trợ.

Thay vào đó, bạn phải nghĩ "dựa trên sự kiện". Sử dụng setTimeout để gọi một hàm sau một khoảng thời gian nhất định, sẽ tiếp tục chạy JavaScript trên trang trong suốt thời gian đó.

+1

Có cách nào để thực hiện việc này không? Làm cho trang không phản hồi thực sự là một điều tích cực đối với tôi! – user2370460

+1

fortunatelly có: sleep.js http: // stackoverflow.com/a/16873849/667927 –

0

Bạn có thể tạo một sự chậm trễ sử dụng ví dụ sau

setInterval(function(){alert("Hello")},3000); 

Thay với # của mili giây

Bạn có thể đặt nội dung của những gì bạn muốn thực hiện bên trong hàm.

+5

Câu trả lời này hơi thiếu (tôi nghĩ) vì setInterval sẽ tiếp tục chạy sau mỗi 3 giây, không chỉ một lần. –

+0

@AdamDavis Tôi đã thử nghiệm phương pháp này và tôi chưa gặp phải bất kỳ sự cố nào. Nếu bạn hoặc người khác kiểm tra điều này và chứng minh bằng cách khác, hãy để cộng đồng biết. Cảm ơn –

+0

@CBC_NS Tôi đã dùng thử và tôi cũng lặp lại 3 giây một lần. Tiện dụng để ghi nhớ mặc dù. –