是否有更优雅的方式来执行以下操作?
private getHeaders(): Observable<any> {
let version;
let token;
return this.appInfo.getVersion()
.pipe(
tap(appVersion => version = appVersion),
mergeMap(() => this.storage.get('access_token')),
tap(accessToken => token = accessToken),
mergeMap(accessToken => of(this.createHeaders(version, token)))
);
}
我怎样才能更流利记住 this.appInfo.getVersion()
和 this.storage.get('access_token')< 的两个返回值
而不是使用 rxjs 的强大功能将它们写入临时变量?
也许将一些可观测值合并为一个? 有太多的 rxjs 运算符和东西......
最佳答案
使用forkJoin
:
.pipe(
mergeMap((appVersion) => forkJoin(
of(appVersion),
this.storage.get('access_token').take(1)
)),
mergeMap(([version, token]) => {
this.createHeaders(version, token)
})
)
但使用 withLatestFrom
更容易:
.pipe(
withLatestFrom(this.storage.get('access_token')),
mergeMap(([version, token]) => {
this.createHeaders(version, token)
})
)
我将两者都包括在内,因为 withLatestFrom
更容易,但应该在需要访问初始参数的地方使用 forkJoin
。例如,如果您正在执行 this.storage.get(appVersion)
关于typescript - 将多个参数传递给 rxjs 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774676/