有没有办法在AngularJS 2中结合承诺?
例如,在Angular 1中,我会使用$q.all
将多个请求合并为一个promise。
是否有Angular 2的等效物?
答案 0 :(得分:13)
http模块的工作方式是Observables,它与promises不同,但你可以同时进行链接和并行调用。
链接可以使用flatMap完成,并行调用可以使用forkJoin来处理。
示例:
//dependent calls (chaining)
this.http.get('./customer.json').map((res: Response) => {
this.customer = res.json();
return this.customer;
})
.flatMap((customer) => this.http.get(customer.contractUrl)).map((res: Response) => res.json())
.subscribe(res => this.contract = res);
//parallel
import {Observable} from 'rxjs/Observable';
Observable.forkJoin(
this.http.get('./friends.json').map((res: Response) => res.json()),
this.http.get('./customer.json').map((res: Response) => res.json())
).subscribe(res => this.combined = {friends:res[0].friends, customer:res[1]});
您可以在此处找到更多详细信息和演示:
http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http
您也可以在Observable上调用toPromise()
并将其转换为常规承诺。
答案 1 :(得分:1)
我建议对Angular 2+使用Observables,但如果仍然需要使用Promises,则可以使用以下命令:
Promise.all(
[
promise1,
promise2,
promise3
]
);