Ich schreibe eine Service-Methode, die ein Versprechen zurückgibt, ein Objekt von einer API zu erhalten. Das Objekt wird mit einem Array von Verknüpfungen zurückgegeben, um auch untergeordnete Objekte aus der API abzurufen. Der Schlüssel hier ist, dass ich nicht möchte, dass das äußere Versprechen aufgelöst wird, bis alle untergeordneten Objekte abgerufen und zum übergeordneten MyType hinzugefügt wurden. Das Folgende ist SCHLIESSEN zu dem, was ich will, aber ich weiß nicht, wie man das Versprechen bekommt, auf die Kinderobjekte zu warten, bevor es zurückkehrt.Auflösen mehrerer Versprechen innerhalb eines Versprechens
private getRegistrationDetailsPromise(url: string): Promise<MyType> {
return new Promise<MyType>((resolve) => {
return this.dataService.GetMyType(url)
.then((myType: MyType) => {
_.forEach(myType.childReferences, function(childUrl) {
let child = this.dataService.GetChild(childUrl).then((child) -> {
myType.children.push(child);
};
};
return (x);
});
});
Sie haben bereits ein Versprechen; Sie sollten 'new Promise()' nicht aufrufen. – SLaks
Ich wollte Ihnen eine fertige Code-Lösung anbieten, die 'Promise.all()' verwendet, um auf Ihre Versprechensschleife zu warten, aber ich kann die Details dessen, was Sie zu tun versuchen, nicht wirklich verstehen. Sie haben auch ein Anti-Pattern, wenn Sie interne Versprechen mit "new Promise()" umhüllen. Sie müssen das auch nicht tun. Du kannst nur innere Versprechen zurückgeben, Dinge zu verketten und 'Promise.all()' zu verwenden, um auf mehrere Versprechen zu warten. – jfriend00
Auch, warum im Zeitalter von ES6 und ES7 immer noch '_.forEach()' benutzt wird, was die ineffizienteste Art ist, ein Array zu iterieren. In diesem Fall sollten Sie 'myType.childReference.map()' wahrscheinlich verwenden, um ein Array von untergeordneten Versprechen zu sammeln, die an 'Promise.all()' übergeben und dann vom inneren '.then() '-Handler zurückgegeben werden können. – jfriend00