2016-07-04 17 views
1

Ich habe mit einigen JQuery-Code von MS zu kämpfen, ich verstehe nicht ganz den folgenden Code:Wie können mehrere pipe() Methoden verkettet werden?

$.when(......) 
.pipe(a()) 
.pipe(b()) 
.pipe(c()); 

a = function(){new $.Deferred().resolve();}; 
b = function(){d();}; 
c = ... //some code 

Der Code sehr gut tatsächlich funktioniert, aber ich denke, weder a() noch b() ist ein verzögertes oder versprochenes Objekt zurückgeben, also wie können diese Methoden miteinander verkettet werden?

+0

Beachten Sie, dass '.pipe()' veraltet ist, und '.then()' sollte stattdessen verwendet werden. – Barmar

+0

danke Barmar, ich habe es gerade herausgefunden. Eigentlich, um die Rohre zu verketten, muss ich nicht einmal etwas weiterleiten. Ich konnte die leeren Rohre wie folgt verketten: .pipe(). Pipe(). Pipe (dosomething()); – Yongquan

Antwort

1

Die von .pipe() aufgerufenen Funktionen werden nicht benötigt, um eine Deferred oder Promise zurückzusenden. Vom documentation

Diese Filterfunktionen können einen neuen Wert zurück entlang der verrohrt Versprechen done() oder nicht() Rückrufe übergeben werden, oder sie können einen anderen beobachtbaren Objekt zurückgeben (Deferred, Versprechen, usw.), die werden Übergeben Sie den aufgelösten/abgelehnten Status und die festgelegten Werte an die Rückrufe des verpassten Versprechens.

In Ihrem Code, da sie nicht return Aussagen haben, ist es gleichbedeutend mit return undefined;, und dies wird als genommen „neuer Wert zu entlang bestanden“.

+0

Schöne Erklärung, das ist wirklich, was ich übersehen habe. Danke vielmals! – Yongquan

+0

Die lustige Sache ist, es gibt ein paar Orte, die sie Code wie folgt setzen: var a = function() {new $. Delered(). Resolve();}; .... pipe (a()). pipe() ..., macht total keinen Sinn für mich. – Yongquan

Verwandte Themen