Rxjs 具有间隔的concatMap未按预期工作

Rxjs 具有间隔的concatMap未按预期工作,rxjs,rxjs6,Rxjs,Rxjs6,我正在试图理解为什么我的代码不能像我期望的那样工作 如果复制并粘贴以下代码,您将看到它等待4秒,然后它每秒显示“aaaa”,而不是每秒显示“bbbb”。为什么? import{from,of,race,timer,interval}from'rxjs'; 从“rxjs/operators”导入{groupBy、mergeMap、toArray、map、merge、reduce、concatMap、delay、concat、timeout、catchError、take}; const obs$=

我正在试图理解为什么我的代码不能像我期望的那样工作

如果复制并粘贴以下代码,您将看到它等待4秒,然后它每秒显示“aaaa”,而不是每秒显示“bbbb”。为什么?

import{from,of,race,timer,interval}from'rxjs';
从“rxjs/operators”导入{groupBy、mergeMap、toArray、map、merge、reduce、concatMap、delay、concat、timeout、catchError、take};
const obs$=区间(4000).pipe(映射(()=>'aaaa');
const obs2$=区间(1000).pipe(映射(()=>'bbbb');
const result$=obs$.pipe(concatMap(()=>obs2$);
const subscribe=obs$.subscribe(val=>console.log(val+''+newdate().toLocaleTimeString());

obs$
未完成,因此从未订阅过
obs2$
。这是预期的行为。尝试将
take(5)
添加到
obs$
中的
管道中,以查看行为如何变化。@cartant如果我将take(5)添加到obs$中的管道中,它将显示“aaaa”5次并停止发出任何值。我期望看到的结果应该是:“等待4秒,永远每秒钟显示一次‘bbbb’。所以我不明白为什么不是这样订阅
result$
。这是使用
concat
合成的可观察到的。好的,谢谢@cartant它可以工作
import { from, of, race, timer, interval } from 'rxjs';
import { groupBy, mergeMap, toArray, map,merge, reduce, concatMap, delay, concat, timeout, catchError, take } from 'rxjs/operators';


const obs$ = interval(14000).pipe(map(() => 'aaaa'), take(5));
const obs2$ = interval(1000).pipe(map(() => 'bbbb'));

const result$ = obs$.pipe(concatMap(() => obs2$));

const subscribe = result$.subscribe(val => console.log(val + ' ' + new Date().toLocaleTimeString()));