En mi componente Angular ngOnInit() quiero:
Ambas llamadas HTTP siempre se están ejecutando, pero cuando mi primer observable está conectado a route.params , el forkJoin(...).subscribe(...) nunca se ejecuta. Si reemplazo this.route.params con Observable.of({id: 1234}) forkJoin().subscribe() se llama correctamente.
// 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 => { ... }, () => { ... } );Supongo que route.params nunca se completa. Es por eso que forkJoin no funciona. Puede usar combineLatest en lugar de forkJoin
De acuerdo con este documento , forkJoin emite el último valor de cada observable, cuando se completan todos los observables.
Observable.of({id: 123})se completará inmediatamente después de dar {id: 123}
Pero
this.route.paramsNunca se completará. Dado que un usuario puede cambiar los parámetros de ruta cuando edita la barra de direcciones del navegador. Estos cambios nunca se detendrán.
Creo que puedes completar observable usando take(1):
this.route.params.take(1)O bien, si desea responder al cambio de parámetros de ruta, use combineLatest
Observable.combineLatest(dependentObservable, independentObservable)