RxJs缓冲直到数据库插入(promise)

时间:2017-10-19 11:30:32

标签: promise rxjs buffer rxjs5

我有一个数据流,快速传入数据。我想通过保持顺序将它们插入数据库。我有一个数据库,它返回一个promise,当插入成功时解析它。

我想制作一个缓冲新数据的Rx流,直到插入缓冲数据。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

我相信您可以根据自己的需要创建自己的运营商。从RxJS略微突破你可以获得类似的东西(警告,未经测试)......

export class BusyBuffer<T> {
  private itemQueue = new Subject<T>();
  private bufferTrigger = new Subject<{}>();
  private busy = false;

  constructor(consumerCallback: (items: T[]) => Promise<void>) {
    this.itemQueue.buffer(this.bufferTrigger).subscribe(items => {
      this.busy = true;
      consumerCallback(items).then(() => {
        this.busy = false;
        this.bufferTrigger.next(null);
      });
    });
  }

  submitItem(item: T) {
    this.itemQueue.next(item);
    if(!busy) {
      this.bufferTrigger.next(null);
    }
  }

}

然后可以将其用作

let busyBuffer = new BusyBuffer<T>(items => {
  return database.insertRecords(items);
});
items.subscribe(item => busyBuffer.submitItem(item));

虽然并不完全是纯粹的反应,但有些人可能会想出更好的东西。