RxJs 6 链接多个订阅
RxJs 6 chaining multiple subscriptions
我有一个 Angular 6 应用程序。我正在将 rxjs 升级到 6.
在以前的应用程序版本中,我必须像这样拨打电话...
我调用一个可观察对象
对其结果做某事
然后使用上一个的值调用另一个可观察对象
对其结果做一些事情
请使用 concatmap 执行此操作。代码看起来像这样...
this.service1.getData().concatMap(d1 => {
this.d1Local = d1;
return this.service2.getData(d1);
}).subscribe(
this.d2Local = d2,
error => errorFunction);
我正在尝试使用 rxjs6 和 pipe 关键字而不使用 concatmap 重写它。
我目前有...
this._LocationService.getLocation()
.pipe(
map(location => {
console.log(1);
this.location = location;
return this._GeoCoderService.getAddress(location)
.pipe
(map(address => {
this.address = "You are near " + address;
this.showSpinner = false;
}
))
}
)
);
我从未看到“1”被记录到控制台。
我应该怎么做?
更新:
我知道有下面的代码。我认为这几乎是正确的,但我没有看到最后的 condole.log print 1....
this._LocationService.getLocation()
.pipe(map((location: ILocation) => {
this.location = location;
return this._GeoCoderService.getAddress(location);
})
, catchError(error => { this.showSpinner = false; return throwError('Something went wrong!') })
).subscribe(
tap((address: string) => { console.log(1) })
);
我错过了什么?
在 pipe()
之后你应该 .subscribe()
(可观察对象是惰性的,如果你只是做 pipe()
它不会触发但 subscribe
会触发)
我不会摆脱 concatMap
运算符。它最适合这份工作。为了使事情更清晰,我也不会将数据存储在 map
运算符中。对于副作用,tap
是可读代码的最佳选择。
this.service1.getData().pipe(
tap(d1 => this.d1Local = d1),
concatMap(d1 => this.service2.getData(d1),
).subscribe(
d2 => this.d2Local = d2,
error => errorFunction);
我有一个 Angular 6 应用程序。我正在将 rxjs 升级到 6.
在以前的应用程序版本中,我必须像这样拨打电话...
我调用一个可观察对象 对其结果做某事 然后使用上一个的值调用另一个可观察对象 对其结果做一些事情
请使用 concatmap 执行此操作。代码看起来像这样...
this.service1.getData().concatMap(d1 => {
this.d1Local = d1;
return this.service2.getData(d1);
}).subscribe(
this.d2Local = d2,
error => errorFunction);
我正在尝试使用 rxjs6 和 pipe 关键字而不使用 concatmap 重写它。
我目前有...
this._LocationService.getLocation()
.pipe(
map(location => {
console.log(1);
this.location = location;
return this._GeoCoderService.getAddress(location)
.pipe
(map(address => {
this.address = "You are near " + address;
this.showSpinner = false;
}
))
}
)
);
我从未看到“1”被记录到控制台。 我应该怎么做?
更新:
我知道有下面的代码。我认为这几乎是正确的,但我没有看到最后的 condole.log print 1....
this._LocationService.getLocation()
.pipe(map((location: ILocation) => {
this.location = location;
return this._GeoCoderService.getAddress(location);
})
, catchError(error => { this.showSpinner = false; return throwError('Something went wrong!') })
).subscribe(
tap((address: string) => { console.log(1) })
);
我错过了什么?
在 pipe()
之后你应该 .subscribe()
(可观察对象是惰性的,如果你只是做 pipe()
它不会触发但 subscribe
会触发)
我不会摆脱 concatMap
运算符。它最适合这份工作。为了使事情更清晰,我也不会将数据存储在 map
运算符中。对于副作用,tap
是可读代码的最佳选择。
this.service1.getData().pipe(
tap(d1 => this.d1Local = d1),
concatMap(d1 => this.service2.getData(d1),
).subscribe(
d2 => this.d2Local = d2,
error => errorFunction);