我试图了解combineAll
操作员是如何工作的。我正在使用官方文档中的以下示例:
import { take, map, combineAll } from 'rxjs/operators';
import { interval } from 'rxjs';
const source$ = interval(1000).pipe(take(2));
const example$ = source$.pipe(
map(val =>
interval(1000).pipe(
map(i => `Result (${val}): ${i}`),
take(5)
)
)
);
example$
.pipe(combineAll())
.subscribe(console.log);
输出是:
["Result (0): 0", "Result (1): 0"]
["Result (0): 1", "Result (1): 0"]
["Result (0): 1", "Result (1): 1"]
["Result (0): 2", "Result (1): 1"]
["Result (0): 2", "Result (1): 2"]
["Result (0): 3", "Result (1): 2"]
["Result (0): 3", "Result (1): 3"]
["Result (0): 4", "Result (1): 3"]
["Result (0): 4", "Result (1): 4"]
试图弄清楚为什么,我做了这个简单的方案:
从文档中,我读到每次任何内部 Observable 发出一个值时,这个发出的值都会与所有其他内部 observable 的最后一个值组合。
在上面的方案中,我们可以看到内部 Observables 在一段时间内发出了 10 个值,所以我希望随着时间的推移得到 10 个值的输出,但它是 9。
此外,在输出的第一行:
["Result (0): 0", "Result (1): 0"])
'Result (1): 0' 的 0 是否对应空值?因为 Observable 'inner 2' 还没有发出任何东西?
在这里完成是我期望的输出:
["Result (0): 0", "Result (1): 0"]
["Result (0): 1", "Result (1): 0"]
["Result (0): 1", "Result (1): 0"]
["Result (0): 2", "Result (1): 0"]
["Result (0): 2", "Result (1): 1"]
["Result (0): 3", "Result (1): 1"]
["Result (0): 3", "Result (1): 2"]
["Result (0): 4", "Result (1): 2"]
["Result (0): 4", "Result (1): 3"]
["Result (0): 4", "Result (1): 4"]
这显然是错误的,但我没有发现我的错误,有人可以解释吗?