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