Tam olarak ne sorduğunuzu açıklamıyorum, ama Javascript'in istediğiniz şekilde çalışmadığını düşünüyorum. Örneğin, normal bir işlev çağrısının, işlem tamamlanıncaya kadar veya belirli bir süre (hangisi önce gelirse) kadar devam ettirilemez. Bu javascript dışında uygulanabilir ve javascript ile (eşzamanlı ajax çağrıları ile yapıldığı gibi) maruz kalabilir, ancak düzenli işlevleri ile saf javascript içinde yapılamaz.
Diğer dillerden farklı olarak, Javascript tek bir iş parçacığıdır, böylece bir işlev yürütürken bir zamanlayıcı asla yürütmez (web çalışanları hariç, ancak yapabilecekleri çok çok sınırlıdır). Zamanlayıcı yalnızca işlev yürütüldüğünde yürütülür. Böylece, bir zamanlama fonksiyonu ile bir zamanlayıcı arasındaki bir ilerleme değişkenini bile paylaşamazsınız, böylece bir zamanlayıcının bir işlevin ilerleyişini "kontrol etmesi" için bir yol yoktur.
Kodunuz tamamen bağımsızdıysa (global değişkenlerinizden herhangi birine erişmediniz, diğer işlevlerinizi aramadılar ve yine de DOM'a erişmediler), sonra bir web sitesinde çalıştırabilirsiniz. çalışan (yalnızca yeni tarayıcılarda bulunur) ve ana iş parçacığında bir zamanlayıcı kullanın. Web çalışan kodu tamamlandığında, sonuçlarla ana konuya bir mesaj gönderir. Ana iş parçacığı bu mesajı aldığında, zamanlayıcıyı durdurur. Zamanlayıcı sonuçları almadan önce patlarsa, web çalışanını öldürebilir. Ancak, kodunuz web çalışanlarının kısıtlamaları ile yaşamak zorunda kalacaktı.
- ajax arama veya bir resmin yüklenmesi gibi bir zaman uyumsuz işlem başlatın: Böyle (onlar daha iyi JavaScript'ın tek iş parçacıklı-lık ile çalıştıkları için)
Soemthing da asenkron işlemleri ile yapılabilir.
- Zaman aşımı süreniz için
setTimeout()
kullanarak bir zamanlayıcı başlatın.
- Zamanlayıcı, senkronize olmayan işleminiz tamamlanmadan önce patlarsa, senkronize olmayan işlemi durdurun (iptal etmek için API'leri kullanarak).
- Zamanlayıcı tetiklenmeden önce eşzamansız işlem tamamlanırsa, zamanlayıcıyı
clearTimeout()
ile iptal edin ve devam edin.
Örneğin, burada bir resmin yüklenmesi üzerine bir zaman aşımı koymak için:
function loadImage(url, maxTime, data, fnSuccess, fnFail) {
var img = new Image();
var timer = setTimeout(function() {
timer = null;
fnFail(data, url);
}, maxTime);
img.onLoad = function() {
if (timer) {
clearTimeout(timer);
fnSuccess(data, img);
}
}
img.onAbort = img.onError = function() {
clearTimeout(timer);
fnFail(data, url);
}
img.src = url;
}
[ 'Window.setTimeout (function_here, number_timeout_milliseconds) '] (https://developer.mozilla.org/en/DOM/window.setTimeout) ya da' window.setInterval'? –
Yapılamaz, işlev bitene kadar kontrolü herhangi bir şeye iade etmez. – Esailija