Birinin bana yardımcı olabileceğini umduğum js sözleriyle ilgili bir sorunum var. Aşağıdaki fonksiyonum, $ .ajax bir çağrı gerçekleştirir ve bu nedenle bir söz verir. Bu fonksiyon güncellemeler ben Recurse olarak bu tazelenmiş div göstermek için tarayıcıya geri kontrol el gerekir gibi, aşağıdaki gibi bir setTimeout çağırıyorum:
var nextBitOfWork = function() {
return myFunction(email);
};
setTimeout(nextBitOfWork, 0);
(recurses) myFunction artık döndürür nerede bittiğinde söz veriyorum. $ .ajax çağrısı. söz geçirilir ve tüm sözler yakalanır, yukarıda inşa setTimeout fonksiyonu olmadan
return myFunction(email);
ve bana ihtiyacım olan dizi çıktı almak için izin ve her şey zaman özyinelemeye iyi çalışıyor: Ben sadece
çağırırsanız biter. Ancak setTimeout olmadan tarayıcıyı yenilemiyorum. Yukarıdaki gibi kullanarak div güncelleme yenilemeyi görüntüleyebilirim, ancak sözünü kaybediyor gibi görünüyor ve bu yüzden script devam ediyor ve myFunction'ın yeniden oluşturduğu diziyi doldurmaya çalışmıyorum.
SetTimeout'un güvenilir bir şekilde söz verdiğinden emin olmak için, yanıt dizisini oluşturup div güncellemelerini görüntülediğim gibi herhangi bir düşünce var mı?
Yardımlarınız için şimdiden teşekkürler! tarayıcı div vermektedir rağmen, dizi topladığım için myFunction ile inşa -
function refreshscreen(func,time) {
var timer = $.Deferred();
setTimeout(function() {
return func().then(timer.resolve());
}, time);
return timer.promise();
}
Hala
aynı sorunu:
refreshscreen olanvar func = function() {
myFunction(email);
};
return refreshscreen(func,0);
: -
Tamam şimdi aşağıdaki var $ .ajax yanıtları sadece 1 element uzunluğundadır - 20 kere geri çekilse de! Ekranı yenilemek için çağrı yapılmadan dizi iyi bir şekilde oluşturulur, ancak tarayıcı, tekrarlamadıkça div’u asla oluşturmaz!
Taleplerin sıraya konması yerine (daha sonra, gerekirse) geri çağrıları kullanma hakkında ne düşünüyorsunuz? – briosheje
Çok büyük bir kodun yeniden yazılması anlamına gelir - bunun vaatlerle mümkün olduğunu bildiğinizden emin olun, ancak bunları işlemek için nasıl yapılandıracağınızdan emin değilsiniz! –
Düzenlemede 'func'' MyFunction'dan alınan sözü geri vermelidir. (Ayrıca "setTimeout" içindeki dönüşü de kaldırabilirsiniz) – csum