У меня есть функция, которая возвращает что-то вроде Observable<[number, Array<DataItem>]>
. Можно ли написать некоторую функцию, которая возвращает Observable<[number, Array<PageWithDataItems>]
с использованием некоторых функций Observable, заданных функцией chunk
(куски массива DataItem в соответствии с размером страницы) и простой конструктор, который создает объекты PageWithDataItems с массивным массивом DataItem. У меня есть код, который подписывается на Observable<[number, Array<DataItem>]>
, а затем создает новый Observable, но я надеюсь, что можно будет сделать то же самое с map, mapTo, switchMap
или аналогичным. Я немного потерян во всех функциях Observable, поэтому любая помощь?Наблюдаемая функция для возврата выделенного массива
0
A
ответ
1
Я не совсем уверен, что вы собираетесь здесь, но я дал ему выстрелили:
// stream would be your data... just random chunks of numbers as an example here.
const stream = Rx.Observable.range(0, 480).bufferWithCount(100).select(d => [Math.random() * 100, d]);
class DataChunk<T> {
constructor(public data: Array<T>) { }
}
const pageSize = 10;
stream
// I do not understand what the 'number' in your [number, Array<DataItem>]
// represents. But it is the 'someNumber' item here..
.map(d => ({someNumber: <number>d[0], data: <number[]>d[1]}))
.map(d => ({
someNumber: d.someNumber,
pages: Ix.Enumerable
.fromArray(d.data)
.select((item, idx) => ({ pageNr : idx % pageSize, item: item }))
.groupBy(i => i.pageNr)
.select(pageItems => new DataChunk(pageItems.select(i => i.item).toArray()))
.toArray()
}))
.subscribe(dataInfo => {
// here each dataInfo sent down the stream will have been split up in to chunks
// of pageSize
log('Data recieved: ');
log(' someNumber: ' + dataInfo.someNumber);
log(' page count: ' + dataInfo.pages.length);
});
Работа на пример jsfiddle.
Я использовал IxJS, чтобы сделать chunking. Он работает аналогично RxJS, но работает с коллекциями (например, массивами), а не с потоками эвенов типа RxJS. Надеюсь, это было близко к тому, что вы хотели, ваш вопрос не совсем ясен.
Не могли бы вы выслать код, который у вас уже есть? Я не на 100% отмечу, что вы используете. – paulpdaniels