rxjs里concat operators的用法
concat joins multiple Observables together, by subscribing to them one at a time and merging their results into the output Observable. You can pass either an array of Observables, or put them directly as arguments. Passing an empty array will result in Observable that completes immediately.
concat接受多个Observable作为参数,在同一个时间点subscribe这些Observable,将其结果合并到一个新的output Observable中去。
concat will subscribe to first input Observable and emit all its values, without changing or affecting them in any way. When that Observable completes, it will subscribe to then next Observable passed and, again, emit its values. This will be repeated, until the operator runs out of Observables. When last input Observable completes, concat will complete as well. At any given moment only one Observable passed to operator emits values. If you would like to emit values from passed Observables concurrently, check out merge instead, especially with optional concurrent parameter. As a matter of fact, concat is an equivalent of merge operator with concurrent parameter set to 1.
concat会subscribe参数里第一个input Observable,emit数据,然后串行地处理下一个Observable,直到conat参数列表里所有Observable都处理完。如果想使传入concat的所有Observable都同时并发地emit value,使用merge.
concat 等价于merge operator以concurrent参数为1的方式去运行。
看个例子:
import { concat, interval, range } from 'rxjs';
import { take } from 'rxjs/operators';
const timer = interval(1000).pipe(take(4));
const sequence = range(1, 10);
const result = concat(timer, sequence);
result.subscribe(x => console.log(x));
// results in:
// 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10
测试结果:
先以每秒的间隔,慢慢显示出0,1,2,3一共4个数(来自interval Observable),然后一秒之内打印1~10(来自range Observable):
const timer1 = interval(1000).pipe(take(10));
const timer2 = interval(2000).pipe(take(6));
const timer3 = interval(500).pipe(take(10));
const result = concat(timer1, timer2, timer3);
result.subscribe(x => console.log('Jerry: ' + x));
以1秒的时间间隔打印0~9,以2秒的时间间隔打印0~5,以0.5秒的时间间隔打印0~9:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 算法集锦(10)| 自动驾驶、机器人 | 物品图像动态检测算法实现
- Hystrix仪表盘
- Centos7 Nginx的SSL证书安装
- 算法集锦(11)| 自动驾驶 | 基于HOG和SVM的车辆识别算法
- 剑指offer(一):找出数组中重复的数字
- 剑指offer(二):不修改数组找出重复的数字
- 漫画:什么是树状数组?
- poiAndEasyExcel学习(五)
- 两分钟真能搞懂桶排序
- SpringMVC文件上传下载
- 学弟不懂原码反码补码,气的我给女朋友讲了一夜
- 使用 HanLP 统计二元语法中的频次
- 算法集锦(13)|自然语言处理| Python代码的语义搜索引擎创建
- 特征锦囊:彻底了解一下WOE和IV
- Nginx专辑|05 -如何使用Nginx配置正向代理