I yüklü SO dom (biraz) sonra çalıştırmak için ilave bir yardımcı yöntemleri kesmek bir bit olarak kullanılan ilgili Meteor.defer()
çok görmek - temelde Template.foo.rendered
yöntem içinde kod çalıştıran aynı etkiyi elde etmek için . Ancak, Meteor.defer
'un ana (ve en iyi) kullanımı asenkronize olarak numaralı bir görevi çalıştırmaktır.
Diyelim ki bir e-posta gönderdiğimiz bir uygulamamız var. Sunucuda, bir meteor yönteminin içinde işlem yapmak, uygulamanızı önemli ölçüde yavaşlatmak için birkaç saniye sürebilir. Ancak, bu işlemi Meteor.defer
e-posta işlemiyle yürütürseniz, e-posta işlemi yürütme işlemini yürütmeyi engelleyemez, e-posta gönderir (anında bir şans olduğunda anında gönderir), ancak her şey daha hızlı çalışır; bekleyen. Bulletproof Meteor numaralı telefondan yürütmeyi erteleme konusunda harika bir örnek ders var.
Aslında bir setTimeout(f,0)
ile aynı etkiyi elde edebilirsiniz - yavaş bir işlevi varsa, bu nedenle 'Ertele'yı' zaman aşımı yavaş süreci, sen setTimeout
bunu sarabilirdiniz ve kodun kalan tamamlayacak ve Göründüğü gibi, setTimeout(f,0)
aslında oldukça yararlı bir amaca sahip!
Bu işlemin bir örneğini görmek için, here's a fiddle, konsolu açın ve 'foo' günlüklerinin nerede olduğunu izleyin.
Yakaladım.Açıklama için teşekkürler. "Ertelemek", üçüncü taraf kodunu başlatmadan önce DOM öğelerinin yüklenmesini beklemek için kullanabileceğim bir şey olabileceğini düşündüm, çünkü bu yazı bundan bahseder - https://github.com/meteor/meteor/issues/2176 -: ' Meteor.defer() yöntemini düzenli olarak kullanıyorum. Herzaman, kodumda yürütmüyormuş gibi görünen bir talimatım var ve daha sonra konsolda aynı talimatı çalıştırıyorum ve çalışır, Meteor.defer() ile koduma koyarım ve genellikle çalışır. Tipik olarak, DOM’da bağlı olduğum bir şeyin henüz oluşturulmadığı durumlar görünüyor. ... ' – fuzzybabybunny
Bir 'render' geri çağrısının etkisini elde etmek için nasıl kullanılacağını anlamıyorum. Eğer kod 'async' yani 'non-blocking' yapmak için 'defer' kullanırsanız, kod hemen bir şey beklemeden hemen yürütülür ... bir şeyin tamamlanmasını beklemenin tam tersidir (DOM render gibi). – fuzzybabybunny
Aslında bir anlam ifade ediyor ... bir "erteleme" çalıştırması onu geçerli yürütme sırasından kaldırır ve js tek bir iş parçacığı olduğu için, yürütme sırasındaki her şey bittiğinde çalıştırılır - bu yüzden biraz çalışır. Gecikme (ilk yorumunuzda) ancak ikinci yorumunuzda derhal yürütme (çünkü tek iş parçacıklı). –