如何正确地链接从效果/行动派遣其他行动

时间:2016-10-28 02:42:59

标签: rxjs ngrx

我有一个动作A(由副作用拦截),在A完成处理后触发另外两个动作。

目前,我正在使用rxjs中的do()运算符,例如:

this._action$.ofType('TYPE_A').switchMap(action => a_http_call())
    .distinctUntilChanged()
    .do(data => setTimeout(() => this._store.dispatch({type: 'TYPE_B'}), 1))
    .do(data => setTimeout(() => this._store.dispatch({type: 'TYPE_C'}), 1))
    //.some()
    //.more()
    //.process()
    //.done()
    ;

我使用setTimeout()调用(好吧,希望)在A进程的中间嵌套动作B.并且,在两个do() s

之后继续进行A流程

这种做法做得好吗?是否有触发其他操作的首选模式?

2 个答案:

答案 0 :(得分:0)

在处理使用setTimeout()创建的Observable时,使用this._action$不会阻止执行线程,但是如果它执行计算密集的操作,它会在以后关闭时阻塞该线程被执行并可能导致滞后。

但我不认为this._store.dispatch是阻止通话。这意味着它在内部异步调用某些请求(或类似的东西),所以你可能甚至不需要用setTimeout()包装它。

使用.do()可能导致副作用,请注意.do()subscribe()不同,因为在订阅至少一个观察者之前可能根本不会调用它(取决于你是否使用" hot"或" cold" Observables)。

答案 1 :(得分:-4)

找到here

指出的原生rx方式this question