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