假设有两个流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);
答案 0 :(得分:2)
merge
运算符不会直接向您提供此信息,但是您仍然可以在没有外部状态的情况下进行操作:
merge(
a$.pipe(map(a => [a, 0])),
b$.pipe(map(b => [b, 1]))
).subscribe(([value, index]) => { /*...*/ });
可以轻松地将此想法自己转移到新的运算符中,该运算符将自动对传递的可观察对象列表进行此操作。