如何正确地从 effect/action 链接调度其他操作
how to properly chain dispatch other actions from effect/action
我有一个动作 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()
调用来(好吧,希望)将操作 B 从嵌套在 A 的进程中间。 AND,在两个 do()
s
之后继续 A 的过程
这个练得好吗?是否有触发其他操作的首选模式?
使用setTimeout()
在处理这个用this._action$
创建的Observable时不会阻塞执行线程,但是如果它做了一些计算密集型的事情,它无论如何都会在稍后执行这个闭包时阻塞线程并可能导致延迟。
但是我不认为 this._store.dispatch
是阻塞调用。这意味着它在内部异步调用一些请求(或类似的东西)所以你可能甚至不需要用 setTimeout()
.
包装它
使用 .do()
可能会产生副作用,请注意 .do()
与 subscribe()
不同,因为它可能根本不会被调用,直到至少有一个观察者已订阅(取决于您使用的是 "hot" 还是 "cold" Observables)。
这个问题是关于旧的 RXJS 库的,不再有效。现在正确的方法很可能是使用 pipe()
.
旧的和过时的答案仅供记录。
找到原生的接收方式here, which was pointed out by this question
我有一个动作 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()
调用来(好吧,希望)将操作 B 从嵌套在 A 的进程中间。 AND,在两个 do()
s
这个练得好吗?是否有触发其他操作的首选模式?
使用setTimeout()
在处理这个用this._action$
创建的Observable时不会阻塞执行线程,但是如果它做了一些计算密集型的事情,它无论如何都会在稍后执行这个闭包时阻塞线程并可能导致延迟。
但是我不认为 this._store.dispatch
是阻塞调用。这意味着它在内部异步调用一些请求(或类似的东西)所以你可能甚至不需要用 setTimeout()
.
使用 .do()
可能会产生副作用,请注意 .do()
与 subscribe()
不同,因为它可能根本不会被调用,直到至少有一个观察者已订阅(取决于您使用的是 "hot" 还是 "cold" Observables)。
这个问题是关于旧的 RXJS 库的,不再有效。现在正确的方法很可能是使用 pipe()
.
旧的和过时的答案仅供记录。
找到原生的接收方式here, which was pointed out by this question