Так что этот код работает, но он стреляет обратный вызов в .flatmap 5 раз:RxJS - как накапливать данные и действовать на нем, без нескольких обратных вызовов
var i = 0;
const values = {};
return this.obsClient.take(5)
.flatMap(v => {
const time = Date.now();
values[i] = {time: time, count: v.clientCount};
console.log('values => ', values);
i++;
return Rx.Observable.timer(100)
});
«значение => х» получит вход- раз.
Я подумал, что если бы я сделал следующее, это было бы аккумулировать все 5 частей данных перед срабатыванием обратного вызова flatMap:
var i = 0;
const values = {};
return this.obsClient.take(5).takeLast(5)
.flatMap(v => {
const time = Date.now();
values[i] = {time: time, count: v.clientCount};
console.log('values => ', values);
i++;
return Rx.Observable.timer(100)
});
, но он по-прежнему регистрирует «значение => х» в 5 раз. Как я могу накапливать данные и передавать все данные в обратный вызов и не запускать обратный вызов 5 раз?
спасибо, дай мне проверить это –
записку; 'bufferCount' будет выдавать значение каждый раз, когда его счет будет достигнут. Если ваше намерение состоит в том, чтобы иметь ровно 5 элементов, а затем отказаться от подписки, было бы лучше использовать '.take (5) .toArray()', чтобы испустить одно значение, содержащее массив из ваших 5 элементов. –