在我的Angular组件中,ngOnInit()我想:
两个HTTP调用都在执行,但是当我的第一个observable连接到时route.params,该forkJoin(...).subscribe(...)方法永远不会运行.如果我替换this.route.params为Observable.of({id: 1234}) forkJoin().subscribe()被正确调用.
// VERSION 1 forkJoin().subscribe() never gets called
var dependentObservable = this.route.params
.switchMap(params => {
this.myId = +params['id'];
return this.myService.getMyInfo(this.myId);
});
// VERSION 2 forkJoin().subscribe gets called
var dependentObservable = Observable.of({id: 123})
.switchMap(params => {
this.myId = +params['id'];
return this.myService.getMyInfo(this.myId);
});
var independentObservable = this.myService.getOtherInfo();
Observable.forkJoin([dependentObservable, independentObservable])
.subscribe(
results = { ... },
error => { ... },
() => { ... }
);
Run Code Online (Sandbox Code Playgroud)
根据这个文档,当所有可观察对象完成时,forkJoin从每个observable中发出最后一个值.
Observable.of({id: 123})
Run Code Online (Sandbox Code Playgroud)
将在{id:123}后立即补充
但
this.route.params
Run Code Online (Sandbox Code Playgroud)
永远不会完成.由于用户在编辑浏览器地址栏时可以更改路径参数.这种变化永远不会停止.
我认为你可以使用take(1)完成observable:
this.route.params.take(1)
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要更改路线参数,请使用combineLatest
Observable.combineLatest(dependentObservable, independentObservable)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2509 次 |
| 最近记录: |