---abcde-----f-------gh-----i----> //Events
У меня есть «рабочая очередь», за которой я хочу наблюдать / подписываться. Это массив командных объектов для обработки. Новые элементы работы обычно поступают пачками, и их необходимо обрабатывать последовательно (в порядке получения, по одному, до полной обработки).
Я использую RxJS 5.0.0-beta.6. (версия, навязанная другими библиотеками)
Вот рабочий пример, иллюстрирующий желаемое поведение, но использующий RxJS v4.
Основной рассматриваемый код - это ...
var events$ = Rx.Observable.fromEvent(produceEvent, 'click')
.timestamp()
.tap(({timestamp}) => updatePanelAppend(pending, timestamp));
var inProgress$ = events$;
var done$ = inProgress$
.flatMapWithMaxConcurrent(1, ({timestamp}) =>
Rx.Observable.fromPromise(() => {
updatePanelAppend(inProgress, timestamp);
removeFromPanel(pending, timestamp);
return expensiveComputation(getRandomInt(1, 5) * 1000, timestamp)
}));
done$.subscribeOnNext((timestamp) => {
updatePanelAppend(done, timestamp);
removeFromPanel(inProgress, timestamp);
});
http://jsbin.com/meyife/edit?js,output
Учитывая текущее состояние бета-версии API и неполную / изменяющуюся документацию, я не могу понять, как это сделать в RxJS 5.
Обновление: это руководство по переходу для перехода с v4 - v5 показывает многие функции, которые были удалены, но не указывает, как делать что-то по-новому. Примеры удаленных операций: .tap, .controlled, .flatMapWithMaxConcurrent (переименован).