首页 > 解决方案 > 带间隔的 concatMap 未按预期工作

问题描述

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

如果您将以下代码复制并粘贴到https://stackblitz.com中,您将看到它等待 4 秒,然后它每秒显示 'aaaa' 而不是每秒显示 'bbbb'。为什么?

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(4000).pipe(map(() => 'aaaa'));
const obs2$ = interval(1000).pipe(map(() => 'bbbb'));
 
const result$ = obs$.pipe(concatMap(() => obs2$));
 
const subscribe = obs$.subscribe(val => console.log(val + ' ' + new Date().toLocaleTimeString()));  

标签: rxjsrxjs6

解决方案


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()));  

推荐阅读