【发布时间】:2017-08-23 20:18:45
【问题描述】:
我是 Angular 4 的新手,所以我接受改变我的方法可能会更好。
我拥有的是这样的:
ngOnInit() {
this.route.paramMap
.switchMap((params: ParamMap) => {
var id = +params.get('id');
return this.service.getOne(id);
}).subscribe(data => {
if (data.clientID === 0) {
data.clientID = +this.route.snapshot.queryParams["parentId"];
}
this.model = data;
},); // Subscription
this.lookupService.getList("clients").then(data => {
this.clients = data;
}); // Promise
}
在客户端,我需要进行另一个服务器调用,但前提是我有来自上述两个调用的数据。换句话说,我需要 Subscription 来完成(好吧,不是完成,而是设置值)和 Promise 来完成。
是否有类似Promise.all 的东西也可以确保this.model 已在Subscription 调用中设置?
编辑: 我可以串联运行它们,但出于性能原因,我想并行运行它们。
编辑 2:
Promise 旨在加载查找数据以仅填充一次下拉列表。 Subscription 旨在在每次更改 URL 中的“id”时更改主模型。
【问题讨论】:
-
所以
lookupService.getList()应该只运行一次。service.getOne()应该在每次新参数到达时运行,对吗?好的,第三个电话呢?你说要等另外两个生产,但是第一个生产之后呢?第三次调用应该只进行一次还是每次新参数到达时进行? -
@BeetleJuice 我已经将第三个调用简化为只运行一个本地过滤器函数,但它需要在
service.getOne()更新后与每个新参数一起运行。 -
我重写了我的答案并提供了一个演示。如果您找到更好的解决方案,请教给我们!
标签: angular typescript promise rxjs