Angular 9 rxJs-如何使用combine/merge语句检索可观察值并传递给另一个函数

Angular 9 rxJs-如何使用combine/merge语句检索可观察值并传递给另一个函数,angular,rxjs,Angular,Rxjs,我有一项服务,让我打开一个小吃吧: this.snackBarService.open(title, body); title和body是字符串 我遇到的问题是,它们都需要从键进行翻译,翻译服务返回一个可观察的: /** * Returns an observable for a translation based on the key * * @param key the translation key */ private getTranslation(ke

我有一项服务,让我打开一个小吃吧:

this.snackBarService.open(title, body);
title
body
是字符串

我遇到的问题是,它们都需要从键进行翻译,翻译服务返回一个可观察的:

  /**
   * Returns an observable for a translation based on the key
   *
   * @param key the translation key
   */
  private getTranslation(key: string): Observable<string> {
    return this.translocoService.selectTranslate(key, {}, 'auth');
  }
但什么也没发生…控制台不记录任何内容:(


要订阅和取消订阅getTranslation的两个调用会有点乏味……那么,有没有简单的方法可以从两个可观察的调用中获取值并将其传递到snackbar?

我相信只有使用
forkJoin
就足够了

forkJoin([
this.getTranslation('snackbar.username.success.title'),
this.getTranslation('snackbar.username.success.body'))
]).订阅(
响应=>{
log('here',响应[0],响应[1]);
打开(响应[0],响应[1]);
}
);
forkJoin
仅当两个观察值都已完成时才会发出。如果未完成,则可以使用
combinelatetest
和管道中的
take(1)
仅使用从观察值发出的第一个值并完成

组合测试([
this.getTranslation('snackbar.username.success.title'),
this.getTranslation('snackbar.username.success.body'))
]).烟斗(
采取(1)
).订阅(
响应=>{
log('here',响应[0],响应[1]);
打开(响应[0],响应[1]);
}
);

我之前尝试过forkJoin,但被卡住了。感谢您指出它只会在完成时发出(因为我现在知道翻译服务没有完成!)。您的更新回答CombineTest非常有效。感谢您的快速响应!
  this.getTranslation('snackbars.username.success.title').pipe(
    mergeMap(title => {
      return combineLatest(
        of(title),
        this.getTranslation('snackbars.username.success.body')
      );
    }),
    map(([title, body]) => {
      console.log('here', title, body);
      this.snackBarService.open(title, body);
    })
  );