我正在編寫一個服務方法,它將返回一個承諾以從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);
});
});
你已經有承諾;你不應該調用'new Promise()'。 – SLaks
想給你提供一個完成的代碼解決方案,它使用'Promise.all()'來等待你的承諾循環,但我無法真正理解你想要做什麼的細節。當你用'new Promise()'包裝內部承諾時,你也有反模式。你也不需要那樣做。您可以返回內部承諾來鏈接事物並使用'Promise.all()'等待多個承諾。 – jfriend00
另外,爲什麼在ES6和ES7的時代,人們仍然在使用'_.forEach()'這是關於迭代數組的可能性最低的方法。在這種情況下,您應該使用myType.childReferences.map()來累積一個可以傳遞給Promise.all()然後從內部的.then()處理程序返回的子承諾數組。 – jfriend00