jQuery'nin Deferred
eşzamansız işlev zincirlemesini uygulamak için kullanılabilecek iki işlevi vardır:
then()
deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred
doneCallbacks Ertelenmiş çözümlendiğinde çağrılan bir işlev veya işlevler dizisi.
failCallbacks Ertelenmiş reddedildiğinde çağrılan bir işlev veya işlevler dizisi.
pipe()
deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise
doneFilter Ertelenmiş çözümlendiğinde çağrılan isteğe bağlı bir işlev.
failFilter Ertelendi reddedildiğinde çağrılan isteğe bağlı bir işlev.
Bundan then()
biraz daha uzun süredir ortalıkta olduğunu biliyorum , pipe()
ikincisi biraz ekstra fayda sağlamalı, ancak fark tam olarak beni kaçırıyor. Her ikisi de hemen hemen aynı geri arama parametrelerini alırlar, ancak isimleri farklıdır ve a Deferred
döndürme ile a döndürme arasındaki fark Promise
küçük görünür.
Resmi belgeleri defalarca okudum, ancak her zaman kafamı dolaştırmak için onları çok "yoğun" buldum ve arama, bir özelliğin veya diğerinin birçok tartışmasını buldu, ancak farklı olanı gerçekten açıklığa kavuşturan hiçbir şey bulamadım her birinin artıları ve eksileri.
Peki ne zaman kullanmak daha iyidir then
ve ne zaman kullanmak daha iyidir pipe
?
İlave
Felix'in mükemmel cevabı , bu iki işlevin nasıl farklılaştığını netleştirmeye gerçekten yardımcı oldu. Ancak, işlevselliğinin bunun yerine then()
tercih edilebilir olduğu zamanlar olup olmadığını merak ediyorum pipe()
.
Bundan pipe()
daha güçlü olduğu aşikar then()
ve görünen o ki, birincisi ikincisinin yapabileceği her şeyi yapabilir. Kullanmanın bir nedeni then()
, adının aynı verileri işleyen bir işlevler zincirinin sonlandırılması rolünü yansıtması olabilir.
Ancak then()
orijinalin yenisini iade etmesi nedeniyle Deferred
yapılamayacak şekilde iade edilmesini gerektiren bir kullanım durumu var mı?pipe()
Promise