угловые rxjs делают что-то после того, как все видимое отправлено без подписки - PullRequest
1 голос
/ 30 июня 2019

Я буду использовать асинхронный канал, не будет запускать метод подписки.

Аналогично конкатату с 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 Ответ

1 голос
/ 30 июня 2019

Использование bufferCount(N) буферизует N выпусков и отправляет и объединяет массив:

Собирает отправленные значения до тех пор, пока заданное число не будет выполнено, испускает как массив

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

Это создаст массив из каждых 3 значений и выведет их на консоль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...