Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么rxjs每次只打印一个字符的数据?_Javascript_Rxjs_Rxjs6 - Fatal编程技术网

Javascript 为什么rxjs每次只打印一个字符的数据?

Javascript 为什么rxjs每次只打印一个字符的数据?,javascript,rxjs,rxjs6,Javascript,Rxjs,Rxjs6,这是我在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 =

这是我在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()
。它通常用于展平嵌套的观测值,但也可以用于承诺和数组(类似数组的对象)。这正是你在这里看到的

它认为即使有一个字符串,也要展平一个数组,因此它接受数组中的每一项(在您的例子中是字符)并分别重新提交它


但是,另一个问题是,您希望使用
concatAll

实现什么,这是因为
concatAll()
。它通常用于展平嵌套的观测值,但也可以用于承诺和数组(类似数组的对象)。这正是你在这里看到的

它认为即使有一个字符串,也要展平一个数组,因此它接受数组中的每一项(在您的例子中是字符)并分别重新提交它


然而,另一个问题是您希望通过
concatAll

使用
concat
实现什么,而不是
concatAll
我的代码引用更高阶的可观察对象,我想打印第一个可观察对象,直到它达到完整状态。然后打印第二个可观察数据,这就是为什么我使用concatalus
concat
而不是
concatAll
我的代码引用更高阶的可观察数据,我想打印第一个可观察数据,直到它达到完整状态。然后打印第二个可观察数据,这就是为什么我使用concatalB因为我的代码引用了更高阶的可观察数据,我想打印第一个可观察数据,直到它达到完整状态。然后打印第二个可观察的数据,这就是为什么我使用concatalB,但您肯定不需要在现在的位置使用
concatAll()
。似乎使用
mergeMap
而不是
map
可以实现您想要的功能。如果您能详细解释一下您试图实现的功能,我们可能会想出一个解决方案。因为ob.subscribe(obs=>obs.subscribe())只是一种奇怪的做事方式。似乎我误解了concatAll的用法,谢谢你的帮助。因为我的代码引用的是更高阶的可观察对象,所以我想打印第一个可观察对象,直到它达到完整状态。然后打印第二个可观察的数据,这就是为什么我使用concatalB,但您肯定不需要在现在的位置使用
concatAll()
。似乎使用
mergeMap
而不是
map
可以实现您想要的功能。如果您能详细解释一下您试图实现的功能,我们可能会想出一个解决方案。因为ob.subscribe(obs=>obs.subscribe())只是一种奇怪的做事方式。似乎我误解了concatal的用法,谢谢你的帮助。