jQuery'nin Deferredeşzamansız işlev zincirlemesini uygulamak için kullanılabilecek iki işlevi vardır:
then()
deferred.then( doneCallbacks, failCallbacks ) Returns: DeferreddoneCallbacks 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: PromisedoneFilter 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 Deferreddöndürme ile a döndürme arasındaki fark Promiseküçü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 thenve 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 Deferredyapılamayacak şekilde iade edilmesini gerektiren bir kullanım durumu var mı?pipe()Promise