Ich bin verwirrt von etwas in der ES6 Promise API. Ich kann einen klaren Anwendungsfall sehen, wenn mehrere asynchrone Jobs gleichzeitig eingereicht und beim ersten Erfolg "aufgelöst" werden. Dies würde zum Beispiel einer Situation dienen, in der mehrere äquivalente Server verfügbar sind, aber einige sind möglicherweise nicht verfügbar und andere stark geladen und langsam. Mein Ziel wäre also, eine Antwort von der ersten zu erhalten und den Rest zu ignorieren (ja, ich weiß, das ist ein widerlicher Weg für einen Client aus der Perspektive eines Servers zu handeln, aber es ist großartig für den Endbenutzer;)Lösen Sie ES6 Versprechen mit ersten Erfolg?
Soweit ich jedoch sehen kann, habe ich entweder "alle" oder "Rennen "Verhaltensweisen mit denen man spielen kann. Das "alles" Verhalten scheint zu warten, bis alle Anfragen abgeschlossen sind, was bedeutet, dass ich auf die langsamsten warten muss, selbst wenn ein Server bereits fertig ist (tatsächlich muss ich vielleicht auf eine Zeitüberschreitung warten, was ein Desaster wäre) für dieses Szenario.) Das "Rassen" -Verhalten scheint mir jedoch den ersten zu vervollständigen, was, wenn dies ein Fehler ist, auch ein Desaster ist.
Gibt es etwas in der API, das ein "raceToSuccess" -Verhalten erlaubt, oder muss ich es manuell erstellen? Wie würde ich es von Hand bauen?
Als Nebenbemerkung fand ich das gleiche Puzzle in der Java 8 CompletableFuture, die eine eng parallele API zu sein scheint. Also, vermisse ich etwas auf einer philosophischen Ebene?
Plus eine für die Vermeidung der Verhinderer Konstruktor Anti-Pattern. – jib
Ja, es ist eines dieser Dinge, nach denen ich Ausschau halte, wenn vielversprechende Fragen auftauchen. Wenn Sie "neues Versprechen" für etwas anderes als das Konvertieren einer Callback-API in eine Promise-API verwenden, brauchen Sie einen echten Grund. – loganfsmyth
Gach, so einfach, wenn Sie es so sagen. Danke für eine sehr elegante Lösung. Ich gebe zu, ich kann immer noch nicht helfen zu denken, dass es in die API gehört! –