我有一个动作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
这种做法做得好吗?是否有触发其他操作的首选模式?
答案 0 :(得分:0)
在处理使用setTimeout()
创建的Observable时,使用this._action$
不会阻止执行线程,但是如果它执行计算密集的操作,它会在以后关闭时阻塞该线程被执行并可能导致滞后。
但我不认为this._store.dispatch
是阻止通话。这意味着它在内部异步调用某些请求(或类似的东西),所以你可能甚至不需要用setTimeout()
包装它。
使用.do()
可能导致副作用,请注意.do()
与subscribe()
不同,因为在订阅至少一个观察者之前可能根本不会调用它(取决于你是否使用" hot"或" cold" Observables)。
答案 1 :(得分:-4)
找到here
指出的原生rx方式this question