rxjs - 带间隔的 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()));
解决方案
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()));
推荐阅读
- javascript - 如何在 WKWebview 中监听网页 postMessage 事件?
- java - 如何使用用户输入在网格上随机打印星号
- nuget - 在 VS2019 中安装 Newtonsoft.Json 库的问题
- sql-server - 在 SQL Server 2016 中导致死锁的休眠 ORM T-SQL 查询
- r - 如何将一行的日期范围与 R 数据框中按 ID 分组的连续行进行比较
- binding - SwiftUI @Binding 更新不刷新视图
- android - 构建失败,出现一些异常
- flutter - 如何去除 Flutter 中的第二个应用栏?
- office365-apps - 有没有我们可以使用微软帐户注册的第三方应用程序?
- sql - SQL - 显示点而不是逗号作为小数分隔符