角度rxjs可以完成所有可观察的发送而无需订阅

时间:2019-06-30 10:54:04

标签: javascript angular rxjs

我将使用异步管道,不会运行订阅方法。

像concat 1到10一样,将每3个数字切成一个新数组。

import { timer, concat, interval, range } from 'rxjs';
import { delay, map, tap, take, startWith } from 'rxjs/operators';

const sliceEveryN = (a,b) => console.log('Method runs')
const arr = []
const source = range(1, 5); // [1..5]
const source2 = range(6, 5); // [6..10]
const final = concat(source, source2).pipe(
	map(v => arr.push(v))
	).pipe(
	// I want to this at last, not every observable sent
	map(v => sliceEveryN(3, v)) // [[1,2,3], [4,5,6], [7,8,9], [10]]
	)

这将运行sliceEveryN方法十次,期望运行一次。

1 个答案:

答案 0 :(得分:1)

使用bufferCount(N)将缓冲N个发射并发射和聚集数组:

  

收集发出的值,直到满足提供的数字为止,并以数组的形式发出

const final = concat(source, source2).pipe(
    tap(v => arr.push(v)),
    bufferCount(3),
    tap(v => console.log(v))
);

这将发出每3个值的数组并将其打印到控制台。