RxJS:大型可观察数组上的块和延迟

时间:2019-05-15 22:33:36

标签: javascript rxjs

尝试将非常大的对象阵列转换成100个对象的块,并等待10秒,然后发射下一个100个对象。 数据集来自HTTP请求。

这是我目前拥有的

const { Subject, from, of } = require('rxjs');
const { bufferCount, concatMap, flatMap, mergeAll, delay } = require('rxjs/operators');

from(hugeArray)
    .pipe(
        bufferCount(100),
        concatMap(txn => of(txn).pipe(delay(10000))),
        mergeAll(),
        flatMap(data => from(data))
    )
    .subscribe(txns => console.log(txns));

这似乎不起作用,因为控制台未记录任何内容。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在我的评论之后:

stackblitz working sample

代码-基本上仅从mergeAll()中删除了flatMap(...)pipe行。

import { from, of } from 'rxjs';
import { tap, bufferCount, concatMap, delay } from 'rxjs/operators';

from(generateHugeArray(100)).pipe(
  bufferCount(10),
  concatMap(txn => of(txn).pipe(delay(3000))),
  tap(h => console.log('chunk: ', h))
).subscribe();



// helper function
function generateHugeArray(size) {
  const arr = [];

  for(let i = 0; i < size; i++) {
    arr.push(i + (Math.random() + '').substring(2,4));
  }

  return arr;
}