Javascript 在一个承诺中解决多个承诺

Javascript 在一个承诺中解决多个承诺,javascript,angularjs,typescript,promise,Javascript,Angularjs,Typescript,Promise,我正在编写一个服务方法,它将返回从API获取对象的承诺。该对象返回一个链接数组,以从API获取子对象。这里的关键是,在检索所有子对象并将其添加到父MyType之前,我不希望解析外部承诺。下面的内容接近我想要的,但我不知道如何获得在返回之前等待子对象被解析的承诺 private getRegistrationDetailsPromise(url: string): Promise<MyType> { return new Promise<MyType>((res

我正在编写一个服务方法,它将返回从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);
    });
});
私有getRegistrationDetailsPromise(url:string):承诺{ 返回新承诺((解决)=>{ 返回此.dataService.GetMyType(url) 。然后((myType:myType)=>{ _.forEach(myType.childReferences,函数(childUrl){ 让child=this.dataService.GetChild(childUrl)。然后((child)->{ myType.children.push(child); }; }; 返回(x); }); });
\uu0.forEach
更改为
.map()
,并从回调返回嵌套的承诺。
这将给你一系列的承诺

然后,您可以将该数组传递给
Promise.all()
,以获得等待它们的Promise


最后,您需要从承诺链返回该承诺。

\uuOach.forEach
更改为
.map()
,并从回调返回嵌套承诺。
这将给你一系列的承诺

然后,您可以将该数组传递给
Promise.all()
,以获得等待它们的Promise


最后,您需要从承诺链中返回该承诺。

您已经有了承诺;您不应该调用
new promise()
。我们将为您提供一个使用
promise.all()的完整代码解决方案
等待你的承诺循环,但我无法真正理解你试图做什么的细节。当你用
new Promise()
包装内部承诺时,你也有一个反模式。你也不需要这样做。你可以返回内部承诺来链接东西,然后使用
Promise.all()
等待多个承诺。另外,为什么在ES6和ES7时代人们仍然使用
.forEach()
,这是迭代数组最低效的方法。在这种情况下,您可能应该使用
myType.childReferences.map()
累积一系列子承诺,这些子承诺可以传递给
Promise.all()
,然后从内部
处理程序返回。然后()
处理程序。避免使用!@jfriend00。我想
forEach(arr,…)
仍然比
arr.forEach(…)快
-但是是的,
map
应该始终是首选。您已经有了承诺;您不应该调用
new promise()
。我们将为您提供一个使用
promise.all()的完整代码解决方案
等待你的承诺循环,但我无法真正理解你试图做什么的细节。当你用
new Promise()
包装内部承诺时,你也有一个反模式。你也不需要这样做。你可以返回内部承诺来链接东西,然后使用
Promise.all()
等待多个承诺。另外,为什么在ES6和ES7时代人们仍然使用
.forEach()
,这是迭代数组最低效的方法。在这种情况下,您可能应该使用
myType.childReferences.map()
累积一系列子承诺,这些子承诺可以传递给
Promise.all()
,然后从内部
处理程序返回。然后()
处理程序。避免使用!@jfriend00。我想
forEach(arr,…)
仍然比
arr.forEach(…)快
-但是,是的,
地图应该是首选。谢谢大家的帮助。这对我现在来说是有意义的。而且,我不经常用Typescript编码,也没有跟上ES6/ES7的变化。这给了我一些其他的工作,这很好。谢谢大家的帮助。这对我现在来说是有意义的。而且,我不使用Typesc编码经常使用ipt,并且没有跟上ES6/ES7的变化。这给了我一些其他的工作,这很好。