我不熟悉Angular 2和HTTP观测.我有一个组件,它调用HTTP服务并返回一个可观察的.然后我同意这个观察结果,它运行良好.
现在,在该组件中,在调用第一个HTTP服务后,如果调用成功,我想调用另一个HTTP服务并返回可观察到的结果.因此,如果第一次调用不成功,组件将返回可观察的,反之,它将返回第二次调用的可观察.
链接HTTP调用的最佳方式是什么?是否有一种优雅的方式,例如monads?
我不熟悉Angular 2和HTTP观测.我有一个组件,它调用HTTP服务并返回一个可观察的.然后我同意这个观察结果,它运行良好.
现在,在该组件中,在调用第一个HTTP服务后,如果调用成功,我想调用另一个HTTP服务并返回可观察到的结果.因此,如果第一次调用不成功,组件将返回可观察的,反之,它将返回第二次调用的可观察.
链接HTTP调用的最佳方式是什么?是否有一种优雅的方式,例如monads?
您可以使用mergeMap
运算符执行此操作.
Angular 4.3+ (using 100) and RxJS 6+
import { mergeMap } from 'rxjs/operators';
this.http.get('./customer.json').pipe(
mergeMap(customer => this.http.get(customer.contractUrl))
).subscribe(res => this.contract = res);
Angular < 4.3 (using 100) and RxJS < 5.5
导入运算符map
和mergeMap
,可以链接两个呼叫,如下所示:
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';
this.http.get('./customer.json')
.map((res: Response) => res.json())
.mergeMap(customer => this.http.get(customer.contractUrl))
.map((res: Response) => res.json())
.subscribe(res => this.contract = res);
这里有更多细节:http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http
有关mergeMap运算符的更多信息,请参阅here