有没有办法找出rxjs中哪些流触发合并操作符?

时间:2018-12-17 06:24:54

标签: rxjs

假设有两个流a$b$
合并 a$b$以在它们中的任何一个发出时获取值。

所以代码就像

merge(a$, b$).subscribe((val) => // do something);

我想知道的是,除了为每个流设置某种标志之外,是否有办法找出哪个流触发了运算符,如下所示:

merge(
  a$.pipe(
    tap(() => {
      fromA = true;
      fromB = false;
    })
  ),
  b$.pipe(
    tap(() => {
      fromB = true;
      fromA = false;
     })
  )
).subscribe((val) => do something based on the flag);

1 个答案:

答案 0 :(得分:2)

merge运算符不会直接向您提供此信息,但是您仍然可以在没有外部状态的情况下进行操作:

merge(
    a$.pipe(map(a => [a, 0])),
    b$.pipe(map(b => [b, 1]))
).subscribe(([value, index]) => { /*...*/ });

可以轻松地将此想法自己转移到新的运算符中,该运算符将自动对传递的可观察对象列表进行此操作。