我有一个模式来了很多,我不是什么是解决它的最佳方法。如何避免订阅汤?
我订阅了一个observable(这里是路由器),它给了我值。我需要这些值中的一个来构建另一个请求来获得另一个可观察值。但是我有一个观察者在订阅。
我知道这不是一个好的模式,但我不知道该怎么做。
如果我使用这第二个可观察值来获取另一个值并获得另一个可观察的观察值。
如何解决这个问题,避免汤?
这里是我的代码:
deal.component.ts
import {Component, OnInit, ChangeDetectionStrategy} from '@angular/core';
import {Observable} from "rxjs/Observable";
import {ActivatedRoute} from "@angular/router";
import {DealsService} from "../deals.service";
@Component({
templateUrl: './+deal.component.html',
styleUrls: ['./+deal.component.scss']
})
export class DealRouterComponent implements OnInit {
deal$: Observable<any>;
public dealId:string;
private sub:any;
constructor(
private route: ActivatedRoute,
private dealsService: DealsService) {}
ngOnInit() {
this.sub = this.route.params
.subscribe(params => {
this.dealId = params['id'];
this.deal$ = this.dealsService.getDeal(this.dealId);
})
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
deal.service.ts
import {Injectable, Inject} from "@angular/core";
import {Observable} from "rxjs/Observable";
import {AngularFireDatabase} from "angularfire2";
@Injectable()
export class DealsService {
constructor(private db: AngularFireDatabase) {}
getDeal(id) {
return this.db.object('deals/' + id);
}
}
deal.component.html
{{deal | async | json}}
这种模式类似于嵌套的'承诺地狱'。解决方案是用mergeMap(flatMap)运算符链接可观察对象。 – estus