用RxJS滴注进料阵列数据

时间:2017-12-26 22:33:18

标签: javascript ecmascript-6 rxjs jest

我正在尝试使用RxJS来填充数据源数据,因此它就像是在使用RxJS一样。

我想要实现的是我有一个承诺,给出这样的数组: ['a', 'b', 'c'] 然后我想在这个时间发出一个值,如下所示: ['a'] ['a', 'b'] ['a', 'b', 'c'] 所以我可以在回测中使用它。我是这样做的,但我不知道是否可以用更干净的方式完成它?

const createDripDataObservable = OHLCData => (
  Observable.range(1, OHLCData.length)
    .map(t => OHLCData.slice(0, t))
)

export const dripObservable = (promise, ObservableFunc = Observable.fromPromise) =>
  ObservableFunc(promise)
    .flatMap(data => createDripDataObservable(data.data.result[TIME_FRAME]))

添加observableFunc的原因是因为RxJS 5中的大理石测试显然不接受承诺。这是我能想到的最干净的方式。但也许有另一种方式?我想添加一个承诺,所以测试更加真实。

describe('Historic market data', () => {
  it('should drip historic data so it acts like real time', () => {
    const testScheduler = new TestScheduler((a, b) => expect(a).toEqual(b))
    // setup
    const lhsMarble = 'x'
    const expected = '(abc)'

    const lhsInput = { x: { data: { result: { [TIME_FRAME]: ['a', 'b', 'c'] } } } }
    const expectedMap = {
      a: ['a'],
      b: ['a', 'b'],
      c: ['a', 'b', 'c'],
    }

    const lhs$ = testScheduler.createHotObservable(lhsMarble, lhsInput)

    const actual$ = dripObservable(lhs$, Observable.from)

    testScheduler.expectObservable(actual$).toBe(expected, expectedMap)
    testScheduler.flush()
  })
})

我非常满意测试,除了我无法添加承诺所以我必须做Observable.from

我对RxJS和反应流很新,所以我希望得到一些反馈!

0 个答案:

没有答案