У меня есть приложение 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 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) })
);
Что мне не хватает?
this._GeoCoderService.getAddress
возвращает Observable, вам нужно использоватьconcatMap
(илиmergeMap
в этом случае). Также нужно подписаться в конце цепочки. - person martin   schedule 11.07.2018.tap()
внутриsubscribe()
? - person CozyAzure   schedule 12.07.2018tap
вsubscribe
- простоsubscribe((address: string) => console.log(1));
- person dsych   schedule 12.07.2018