我正在编写一个服务方法,它将返回一个承诺以从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