为什么 rxjs 每次只打印一个字符?
Why rxjs print data one single character every time?
这是我在 RxJs6 中的代码:
const observable$ = interval(1000).pipe(
take(2),
map(x => interval(1500).pipe(
map(y => x+':'+y),
take(2),
concatAll()
)),
);
observable$.subscribe(obs => {
obs.subscribe(x => console.log(x));
});
我希望我的代码显示这样的结果:
0:0
1:0
0:1
1:1
但实际显示:
为什么我的代码每次只打印一个字符?而且我认为它应该像我上面预期的那样工作而不是实际结果。我对 rxjs 的理解有什么不对吗?
这是因为concatAll()
。它通常用于展平嵌套的 Observable,但它也可以与 Promises 和数组(类数组对象)一起使用。这正是您在这里看到的。
即使你有一个字符串,它也认为你想展平一个数组,所以它获取数组中的每个项目(在你的例子中是字符)并单独重新发出它。
然而,另一个问题是你想用 concatAll
实现什么。
这是我在 RxJs6 中的代码:
const observable$ = interval(1000).pipe(
take(2),
map(x => interval(1500).pipe(
map(y => x+':'+y),
take(2),
concatAll()
)),
);
observable$.subscribe(obs => {
obs.subscribe(x => console.log(x));
});
我希望我的代码显示这样的结果:
0:0
1:0
0:1
1:1
但实际显示:
为什么我的代码每次只打印一个字符?而且我认为它应该像我上面预期的那样工作而不是实际结果。我对 rxjs 的理解有什么不对吗?
这是因为concatAll()
。它通常用于展平嵌套的 Observable,但它也可以与 Promises 和数组(类数组对象)一起使用。这正是您在这里看到的。
即使你有一个字符串,它也认为你想展平一个数组,所以它获取数组中的每个项目(在你的例子中是字符)并单独重新发出它。
然而,另一个问题是你想用 concatAll
实现什么。