için bitirmek bekliyorum ben javascript yeniyim ve ben meşgul bitirmek işlev için bekleyen bir sorun var. Burada kod yok ama kısa bir süre açıklayacağız: Ben 100 ms, hatta 10 s infaz edilebilir bir fonksiyonu varJavaScript: Belirli bir zamana
, en başka var Sonra foo1
diyelim İlk başta giriş parametreleriyle çalışan ve sonra Foo1'i çağıran Foo2. Giriş parametrelerinden biri, arasındaki milisaniye cinsinden zaman, fonksiyonun bitmesini beklemek istedim. yürütme bu sınırı aşması durumunda, sadece bitireceğim operasyon yapacak ve dönüş. Foo1 aşan süreden önce tamamlandıktan durumda, önceki dönün.
Benim çözümleri temel kod sözdiziminde burada, ama umarım anlaşılabilir.
// First wait for the specified time and then execute Foo1 - obviously one after another
self.Foo2 (time) {
setTimeout(self.Foo1(),0);
var now = new Date().getTime();
while(new Date().getTime() < now + time){ /* do nothing */ }
}
/*This one, if I understand it well, creates a queue where at first DoWait
is executed, then Foo1 and after that all other DoWait - so practically
we wait the whole time of execution.*/
var finished = false;
self.DoWait(time, now) {
if(!finished && (new Date().getTime() < now + time)) {
setTimeout(self.DoWait(time, now), 20);
} else {
/* finish procedure */
}
}
self.Foo2 (time) {
setTimeout(function() { self.Foo1(); finished=true;},0);
var now = new Date().getTime();
self.DoWait(time, now)
}
bunu yapmak nasıl mümkün bazı çözüm hakkında biliyor musunuz? çalışanı hakkında okudum, ancak çalışan oluşturmak için, tüm yeni dosyada işleve ihtiyacınız var, ancak işlev/dosya içinde yapılabilecek bir şeyi tercih ederim. Tüm cevaplar için şimdiden teşekkür ederiz.
Çözüm, JavaScript'te meşgul beklemek için değil. – Bergi
'setTimeout (self.Foo1(), 0)' self.Foo1() 'çağırır, bir zaman aşımından sonra değil. 'SetTimeout (Foo1.bind (self), 0) 'yazmanız gerekir. – Barmar
Aslında 'setTimeout (self.Foo1.bind (self), 0)'. – Barmar