我正在尝试使用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和反应流很新,所以我希望得到一些反馈!