1
Я хотел бы сериализовать выполнение функций, возвращающих наблюдаемые. Мне это удалось, но это не очень прагматичное решение. Что было бы более реактивным путем для достижения следующего?Сериализация Observables
import Rx from 'rx'
export default class Executor {
constructor() {
this.queue = []
this.draining = false
}
run(fn) {
return Rx.Observable.create(o => {
this.queue.push(Rx.Observable.defer(() =>
fn()
.doOnNext((value) => o.onNext(value))
.doOnError((err) => o.onError(err))
.doOnCompleted(() => o.onCompleted())))
async() => {
if (this.draining) {
return
}
this.draining = true
while (this.queue.length > 0) {
try {
await this.queue.shift().toPromise()
} catch(err) {
// Do nothing...
}
}
this.draining = false
}()
})
}
}
Не могли бы вы указать, что вы пытаетесь достичь немного больше? – Mosho
Я хочу последовательно выполнять наблюдаемые функции, например. в клиенте <-> серверная связь клиенту не разрешено отправлять больше сообщений до завершения всего активного ответа. – ronag
Возможно [этот] (https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/controlled.md) поможет? –