Bluebird Versprechen.alle () - Methode auf, wenn ein Versprechen ist von einem anderen abhängig
Bin ich einige code schreiben, der derzeit so aussieht, weil ich die Abhängigkeiten in meinem code. Ich Frage mich, ob es eine bessere Möglichkeit, dies zu tun mit Versprechen.alle()? Hier ist mein pseudo-code:
return someService.getUsername()
.then(function(username) {
user = username;
})
.then(function() {
return someService.getUserProps(user);
})
.then(function(userProps) {
userProperties = userProps;
return someService.getUserFriends(user);
})
.then(function(userFriends) {
friends = userFriends;
})
.catch(error)
.finally(function(){
//do stuff with results
});
Das wichtigste ist, dass ich brauche Benutzer, bevor ich die zweite zwei Anrufe für getUserProps() und getUserFriends(). Ich dachte, ich könnte Versprechen.alle() für dieses Beispiel so:
var user = someService.getUsername()
.then(function(username) {
user = username;
})
var getUserProps = someService.getUserProps(user);
var getUserProps = someService.getUserFriends(user);
return Promise.all(user, getUserProps, getUserFriends, function(user, props, friends) {
//do stuff with results
})
Aber ich kann nicht ankommen dieses zu wirken. Ist dies die korrekte groß-und Kleinschreibung zu verwenden .alle?
InformationsquelleAutor Jeff | 2014-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Promise.all()
ist ausgelegt für parallel-Betrieb, wo Sie starten eine Reihe von asynchronen Operationen gleichzeitig ausführen und dann erzählt es Ihnen, wenn Sie fertig sind.Es nicht Folge einer gegen die Beendigung eines anderen in irgendeiner Weise. So, Sie können es nicht verwenden, zu warten, bis der Benutzer bereit zu sein und dann haben die anderen Operationen verwenden, die Benutzer. Es ist nicht nur entworfen, um zu tun.
Können Sie die Benutzer das erste mal und dann, wenn das abgeschlossen ist, könnten Sie
Promise.all()
mit Ihren anderen zwei Operationen, die ich denke, zur gleichen Zeit laufen und nicht voneinander abhängig sind.InformationsquelleAutor jfriend00
Können Sie
.all
aber du gehst zu haben, um sicherzustellen, dass Sie nacheinander ausgeführt werden, Ihren code, können Sie dies tun, indem Sie.then
ing Ihnen, wie Sie das getan haben. Wenn Sie tun, dass Sie verwenden sollten.join
ist eine Kurzform für.all([...]).spread(...
.Wenn, was Sie versuchen zu lösen, ist der Abschluss/das Problem beim verschachteln - dann ist dies der Weg, dies zu tun.
die user-variable wird automatisch an die getUserProps-Funktion, wie es das Versprechen, Auflösung Wert - wie in deinem Beispiel. Sie können
.bind
wenn Sie zusätzliche Parameter oder eine anonyme Funktion.ohhh.... also die Requisiten, die definition hätte: var props = user.dann(getUserProps(user)); ?
Nein, da Benutzer ist ein Versprechen, das schon löst mit dem Benutzernamen. Es ist einfach
user.then(getUserProps)
die nicht die gleiche Sache wieuser.then(function(user){ return getUserProps(user); })
nur kürzer und übersichtlicher. Der Punkt hier ist, dass das Versprechen, fungiert als proxy für den Wert direkt ein.InformationsquelleAutor Benjamin Gruenbaum
Versprechen.alle() ist eine Methode für die Ausführung einer Liste von Versprechungen, die in paralleler, aber wenn wir ausführen wollen eine Liste von Versprechungen, die in einer Serie, wo einer vom anderen abhängig ist, haben wir lösen es ein bisschen anders
InformationsquelleAutor user1197671