Warum nimmt promise.join () eine Funktion als letzten Parameter an?

8

Angenommen, ich habe einen Schritt in einer Prozedur, die das Abrufen von zwei Objekten erfordert. Ich würde join() verwenden, um die Abrufe zu koordinieren:

%Vor%

Die Dokumentation zeigt, dass Sie den Handler auch als letzten Parameter übergeben können:

%Vor%

Ich bin neugierig, was die Gründe für die Existenz dieser Option sind.

    
cleong 13.04.2015, 16:27
quelle

2 Antworten

9

Fakt-Zeit : Der Grund, warum .join hinzugefügt wurde, war @spion glücklich. Nicht ohne Grund bedeutet die Verwendung von .join jedoch, dass Sie eine statische und bekannte Anzahl an Versprechen haben, was die Verwendung mit TypeScript erheblich vereinfacht. Petka (Esailija) gefiel die Idee und auch die Tatsache, dass sie weiter optimiert werden kann, weil sie sich nicht auf seltsame Garantien verlassen muss, die die andere Form einhalten muss.

Im Laufe der Zeit begannen Leute (zumindest ich) damit, es für andere Anwendungsfälle zu verwenden - nämlich Versprechen als Proxies zu verwenden.

Lasst uns darüber reden, was es besser macht:

Statische Analyse

Es ist schwierig, Promise.all statisch zu analysieren, da es auf einem Array mit unbekannten Arten von Versprechen potenziell unterschiedlicher Typen funktioniert. Promise.join kann getippt werden, da man davon ausgehen kann, dass es ein Tupel nimmt - also zum Beispiel für den 3-Versprechen-Fall kann man ihm eine Typensignatur von (Promise<S>, Promise<U>, Promise<T>, ((S,U,T) -> Promise<K> | K)) -> Promise<K> geben, was für% co_de einfach nicht typsicher gemacht werden kann %.

Proxying

Beim Schreiben von Promise-Code im Proxy-Stil ist es sehr sauber zu verwenden:

%Vor%

Es ist schneller

Da es nicht nötig ist, den Wert der gegebenen Versprechungen im Cache zu erzeugen und alle Überprüfungen zu behalten, die Promise.all macht, wird es etwas schneller ausgeführt.

Aber ... du solltest es eigentlich normalerweise nicht kümmern.

    
Benjamin Gruenbaum 14.04.2015, 07:46
quelle
3
  

Sie können den Handler auch als letzten Parameter übergeben. Ich bin neugierig auf die Gründe für die Existenz dieser Option.

Es ist keine "Option". Es ist der einzige Zweck der Funktion join .

%Vor%

entspricht genau

%Vor%

Aber wie in der Dokumentation , es

  

ist viel einfacher (und leistungsfähiger) zu verwenden, wenn Sie eine bestimmte Menge an diskreten Versprechen haben

Es entlastet Sie davon, dass Sie dieses Array-Literal verwenden müssen, und es muss dieses vermittelnde Zwischenobjekt für das Array-Ergebnis nicht erstellt werden.

    
Bergi 13.04.2015 17:10
quelle