【问题标题】:Why rxjs print data one single character every time?为什么 rxjs 每次都打印一个字符?
【发布时间】:2018-09-02 23:09:41
【问题描述】:

这是我在 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 的理解有什么问题吗?

【问题讨论】:

  • 使用concat 而不是concatAll
  • 我的代码引用了更高阶的 observable,我想打印第一个 observable 直到它达到完整状态。然后打印第二个可观察数据,这就是我使用 concatAll 的原因

标签: javascript rxjs rxjs6


【解决方案1】:

这是因为concatAll()。它通常用于扁平化嵌套的 Observable,但它也可以与 Promises 和数组(类似数组的对象)一起使用。 Ant 这正是您在这里看到的。

即使您有一个字符串,它也会认为您想要展平一个数组,因此它会获取数组中的每个项目(在您的情况下为字符)并单独重新发送它。

但是,另一个问题是您想通过concatAll 实现什么。

【讨论】:

  • 因为我的代码引用了更高阶的 observable,我想打印第一个 observable 直到它达到完整状态。然后打印第二个可观察数据,这就是我使用 concatAll 的原因
  • 但是您绝对不需要在现在的位置使用concatAll()。看起来使用 mergeMap 而不是 map 可以做你想做的事。
  • 如果您能多解释一下您想要达到的目标,我们或许能够提出解决方案。因为ob.subscribe(obs => obs.subscribe()) 只是一种奇怪的做事方式。
  • 我好像误解了concatAll的用法,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-11-11
  • 2012-09-11
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
相关资源
最近更新 更多