为什么 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 实现什么。