Câu trả lời:
Bạn muốn setInterval()
:
var intervalID = setInterval(function(){alert("Interval reached");}, 5000);
Tham số đầu tiên cho setInterval () cũng có thể là một chuỗi mã được ước tính.
Bạn có thể xóa một chức năng định kỳ với:
clearInterval(intervalID);
setInterval()
là câu trả lời chính xác cho câu hỏi, bất kể tham số. Đây chỉ là một ví dụ và cả hai phương pháp đều đúng theo định nghĩa.
Xin lưu ý rằng setInterval () thường không phải là giải pháp tốt nhất để thực hiện định kỳ - Nó thực sự phụ thuộc vào javascript mà bạn thực sự gọi theo định kỳ.
ví dụ. Nếu bạn sử dụng setInterval () với khoảng thời gian 1000ms và trong hàm tuần hoàn, bạn thực hiện cuộc gọi ajax mà thỉnh thoảng mất 2 giây để trả về, bạn sẽ thực hiện một cuộc gọi ajax khác trước khi phản hồi đầu tiên trở lại. Điều này thường là không mong muốn.
Nhiều thư viện có các phương pháp định kỳ bảo vệ chống lại những cạm bẫy của việc sử dụng setInterval một cách ngây thơ, chẳng hạn như ví dụ Prototype được đưa ra bởi Nelson.
Để đạt được sự thực thi định kỳ mạnh mẽ hơn với một hàm có lệnh gọi ajax jQuery trong đó, hãy xem xét một cái gì đó như thế này:
function myPeriodicMethod() {
$.ajax({
url: ...,
success: function(data) {
...
},
complete: function() {
// schedule the next request *only* when the current one is complete:
setTimeout(myPeriodicMethod, 1000);
}
});
}
// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);
Một cách tiếp cận khác là sử dụng setTimeout nhưng theo dõi thời gian đã trôi qua trong một biến và sau đó thiết lập độ trễ thời gian chờ trên mỗi lệnh gọi để thực thi một hàm càng gần khoảng thời gian mong muốn càng tốt nhưng không bao giờ nhanh hơn bạn có thể nhận được phản hồi.
Mọi người đều có giải pháp setTimeout / setInterval rồi. Tôi nghĩ rằng điều quan trọng cần lưu ý là bạn có thể truyền các hàm cho setInterval, không chỉ các chuỗi. Nó thực sự có thể "an toàn" hơn một chút để vượt qua các hàm thực thay vì các chuỗi sẽ được "đánh giá" cho các hàm đó.
// example 1
function test() {
alert('called');
}
var interval = setInterval(test, 10000);
Hoặc là:
// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);
Câu hỏi cũ nhưng .. Tôi cũng cần một người chạy nhiệm vụ định kỳ và viết TaskTimer . Điều này cũng hữu ích khi bạn cần chạy nhiều tác vụ trên các khoảng thời gian khác nhau.
// Timer with 1000ms (1 second) base interval resolution.
var timer = new TaskTimer(1000)
// Add task(s) based on tick intervals.
timer.addTask({
name: 'job1', // unique name of the task
tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms)
totalRuns: 10, // run 10 times only. (set to 0 for unlimited times)
callback: function (task) {
// code to be executed on each run
console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
}
});
// Start the timer
timer.start();
TaskTimer
hoạt động cả trong trình duyệt và Node. Xem tài liệu cho tất cả các tính năng.
Bạn sẽ muốn có một cái nhìn về setInterval () và setTimeout ().
Đây là một bài viết hướng dẫn phong nha .
có - hãy xem setInterval
vàsetTimeout
thực thi mã tại một số thời điểm nhất định. setInterval sẽ là cái được sử dụng để thực thi mã định kỳ.
Xem bản demo và trả lời tại đây để sử dụng
Vì bạn muốn hàm được thực thi định kỳ , hãy sử dụng setInterval
Cách gốc thực sự là setInterval()
/ clearInterval()
, nhưng nếu bạn đã sử dụng thư viện Prototype, bạn có thể tận dụng periodicalExecutor:
new PeriodicalUpdator(myEvent, seconds);
Điều này ngăn chặn các cuộc gọi chồng chéo. Từ http://www.prototypejs.org/api/ periodicalExecuter :
"nó bảo vệ bạn chống lại nhiều lần thực thi song song của chức năng gọi lại, nên mất nhiều thời gian hơn khoảng thời gian đã cho để thực thi (nó duy trì một cờ chạy nội bộ, được bảo vệ chống lại các ngoại lệ trong chức năng gọi lại). Điều này đặc biệt hữu ích nếu bạn sử dụng một để tương tác với người dùng theo các khoảng thời gian nhất định (ví dụ: sử dụng lời nhắc hoặc xác nhận cuộc gọi): điều này sẽ tránh được nhiều hộp thông báo tất cả đang chờ để được xử lý. "