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:
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.
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:
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 %.
Beim Schreiben von Promise-Code im Proxy-Stil ist es sehr sauber zu verwenden:
%Vor% 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.
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
.
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.
Tags und Links javascript node.js promise bluebird