typescript - 将多个参数传递给 rxjs 运算符

标签 typescript functional-programming rxjs observable

是否有更优雅的方式来执行以下操作?

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/

相关文章:

javascript - 在循环内触发同步调用,等待两个 api 调用成功,然后下一次迭代需要以 Angular 6 开始

javascript - 创建行为类似于 CombineLatest 但仅发出刚刚触发的源的值的 Observable

rxjs - 如何重置 ReplaySubject 上的扫描累加器?

typescript - 使用 cypress,测量页面加载时间

javascript - 进行修改时应出现 'for-of' 循环,而不是 'for' 循环

typescript - typescript 中带有n个参数的通用 curry 函数

haskell - Haskell 中的 "Pattern-matching"类型

scala - 迭代 Option 实例,直到找到第一个非空实例

javascript - 用于原型(prototype)化多维数组的 typescript 接口(interface)语法?

visual-studio - 构建时出现 Visual Studio 2015 CTP TypeScript 错误