RXJS 6怀疑链观察

时间:2018-08-02 16:37:43

标签: javascript angular typescript rxjs

我不知道在最后一张地图中获取可观察值2的方法,这是一个示例

return observable1.pipe(
map((value1: value1) => {
 return observable2;
 }),
mergeMap((value2: value2) => {
 return observable3;
 }),
 map((value3: value3) => {
 // how can i get value 2 inside here?
 }),
 mapTo(null) 
);

2 个答案:

答案 0 :(得分:1)

不确定要完成的工作,可能是您以错误的方式来解决问题。如果您只需要访问value2,那么它同样会为您服务。

return observable1.pipe(
  map((value1: any) => {
    return observable2;
  }),
  mergeMap((value2: any) => {
    // pass both value 2 and observe3 to the next operator
    return of({observable3, value2});       
  }),
  map((obs: any) => {
    console.log(obs.observable3);
    console.log(obs.value2);
    return obs.observable3;
    // how can i get value 2 inside here?
  }),
  mapTo(null)
);

答案 1 :(得分:0)

如果observable2$observable3$可以并行运行,则可以使用combineLatest解决此问题

   import {
     ...
     combineLatest,
   } from 'rxjs';

  observable1$.pipe(
    map(() => combineLatest(
      observable2$,
      observable3$
    )),
    mergeMap(([value2, value3]) => {
      return value3;
    }),
    mapTo(null)
  )

请注意:有2个combineLatest函数,其中一个来自rxjs,一个来自rxjs/operators。此代码在rxjs

中使用

如果observable3$observable3$之后运行,则解决方案相似,仅需一步即可映射数据

   import {
     ...,
     of,
     combineLatest,
   } from 'rxjs';

  observable1$.pipe(
    map(() => observable2$)
    mergeMap((value2) => combineLatest(
      of(value2),
      observable3$
    )),
    mergeMap(([value2, value3]) => {
      return value3;
    }),
    mapTo(null)
  )