APIからオブジェクトを取得する約束を返すサービスメソッドを書いています。オブジェクトはAPIの子オブジェクトを取得するためのリンク配列とともに返されます。ここでの重要な点は、すべての子オブジェクトが取得されて親のMyTypeに追加されるまで、外側の約束を解決する必要はないということです。以下は私が望むものに近いですが、返す前に子オブジェクトが解決されるのを待つという約束をどのように得るか分かりません。約束の中で複数の約束を解決する
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);
});
});
あなたはすでに約束をしています。 '新しいPromise()'を呼ぶべきではありません。 – SLaks
Promise.all()を使用して約束のループを待っている完成したコードソリューションを提供しようとしていましたが、あなたがしようとしていることの詳細を本当に理解できません。 'new Promise()'で内部の約束事をラップしているときにも、アンチパターンがあります。あなたはそれをする必要もありません。内部の約束を返すだけで、物事を連鎖させ、 'Promise.all()'を使って複数の約束を待つことができます。 – jfriend00
また、なぜES6とES7の時代に人々は依然として可能な配列を反復するのに最も非効率的な方法である '_.forEach()'を使用しているのですか?この場合、おそらく 'myType.childReferences.map()'を使用して、 'Promise.all()'に渡して内部の '.then()'ハンドラから返すことができる子の約束の配列を蓄積するべきです。 – jfriend00