Yanıtlar:
İstersiniz setInterval()
:
var intervalID = setInterval(function(){alert("Interval reached");}, 5000);
SetInterval () işlevinin ilk parametresi ayrıca değerlendirilecek bir kod dizesi olabilir.
Periyodik bir işlevi şu şekilde temizleyebilirsiniz:
clearInterval(intervalID);
setInterval()
parametre ne olursa olsun sorunun doğru cevabıdır. Bu sadece bir örnek ve her iki yöntem de tanım gereği doğrudur.
Lütfen setInterval () 'ın periyodik yürütme için en iyi çözüm olmadığını unutmayın - Bu gerçekten periyodik olarak hangi javascript'i çağırdığınıza bağlıdır.
Örneğin. SetInterval () 'i 1000 ms'lik bir periyotla kullanırsanız ve periyodik işlevde ara sıra geri gelmesi 2 saniye süren bir ajax çağrısı yaparsanız, ilk yanıt geri gelmeden önce başka bir ajax çağrısı yaparsınız. Bu genellikle istenmeyen bir durumdur.
Birçok kütüphanede, Nelson tarafından verilen Prototype örneği gibi, setInterval'i saf bir şekilde kullanmanın tuzaklarına karşı koruma sağlayan periyodik yöntemler vardır.
İçinde jQuery ajax çağrısı bulunan bir işlevle daha sağlam periyodik yürütme elde etmek için, şuna benzer bir şey düşünün:
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);
Diğer bir yaklaşım, setTimeout'u kullanmak, ancak bir değişkende geçen süreyi izlemek ve ardından bir işlevi istenen aralığa olabildiğince yakın ancak hiçbir zaman yanıtları geri alamayacağınız kadar hızlı yürütmek için her bir çağrıda zaman aşımı gecikmesini dinamik olarak ayarlamaktır.
Herkesin zaten bir setTimeout / setInterval çözümü vardır. İşlevleri sadece dizelere değil setInterval'e de aktarabileceğinizi unutmamanın önemli olduğunu düşünüyorum. Aslında, bu işlevlere "değerlendirilecek" dizeler yerine gerçek işlevleri geçirmek muhtemelen biraz "daha güvenlidir".
// example 1
function test() {
alert('called');
}
var interval = setInterval(test, 10000);
Veya:
// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);
Eski soru ama .. Ayrıca periyodik bir görev çalıştırıcısına ihtiyacım vardı ve TaskTimer yazdım . Bu, farklı aralıklarda birden çok görev çalıştırmanız gerektiğinde de yararlıdır.
// 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
hem tarayıcıda hem de Düğümde çalışır. Tüm özellikler için belgelere bakın .
SetInterval () ve setTimeout () 'a bakmak isteyeceksiniz.
İşte iyi bir öğretici makale .
evet - bir göz atın setInterval
vesetTimeout
belirli zamanlarda kod yürütmek için. setInterval, periyodik olarak kod çalıştırmak için kullanılacak olanıdır.
Bir demo izleyin ve kullanım için burada yanıtlayın
Fonksiyonun periyodik olarak yürütülmesini istediğiniz için setInterval kullanın
Yerel yol gerçekten setInterval()
/ clearInterval()
, ancak zaten Prototip kitaplığını kullanıyorsanız, PeriodicalExecutor'dan yararlanabilirsiniz:
new PeriodicalUpdator(myEvent, seconds);
Bu, çakışan aramaları önler. Gönderen http://www.prototypejs.org/api/periodicalExecuter :
"yürütmek için verilen aralıktan daha uzun sürmesi durumunda, geri arama işlevinin birden çok paralel yürütülmesine karşı sizi korur (geri arama işlevindeki istisnalara karşı korumalı dahili bir" çalışan "bayrağı korur). Bu özellikle yararlıdır: kullanıcıyla belirli aralıklarla etkileşim kurmak için birini kullanın (örneğin, bir komut istemi kullanın veya aramayı onaylayın): bu, birden fazla mesaj kutusunun işlem görmeyi beklemesini önleyecektir. "