如何通过RxJs链传递值

时间:2018-03-06 23:22:11

标签: angular rxjs ngrx

这应该是一个简单的解决方案,但我似乎无法把它放在一起......

我有一个返回Promise的函数和另一个返回Promise的函数。我需要使用前者的返回值来调用后者,但我还需要在转换链末尾的两个值。我已经阅读了一些关于mergeMap和forkJoin的文档,但我似乎无法使用它们来获得我需要的结果:

function getBlob(id: string): Promise<Blob>;
function blobToBase64(imageBlob: Blob): Promise<string>;

// ...


// This is what I tried but I getting Observables back after the forkJoin instead of the actual values
return Observable.fromPromise(getBlob(id))
  .map((blob) => return Observable.forkJoin([Observable.of(blob), Observable.fromPromise(blobToBase64)])
  // data[0] and data[1] are undefined but it looks like data is actually an Observable from forkJoin.
  .map((data) => console.log(`Here is ${data[0]} and ${data[1]}`);

任何人都可以解释如何结束blob和base64值吗?

1 个答案:

答案 0 :(得分:1)

要根据第一个承诺的结果创建blobToBase64承诺,您可以使用flatMap familly中的运算符(mergeMapswitchMap,{{1等等。)

最简单的是mergeMap,它需要一个可观察的,当它发出时,它会根据发出的值创建一个新的observable。

concatMap