我得到了这个效果:
@Effect() createModel$: Observable<Action> = this.actions$
.ofType(CREATE_MODEL_REQUEST)
.switchMap(action => this.modelsApi.createModel(action.payload)
.do(() => ({type: CREATE_MODEL_SUCCESS}))
.map(() => ({type: GET_MODELS_REQUEST}))
.catch((err: any) => Observable.of({type: REQUEST_FAILURE, payload: err})));
我正在尝试向http
减速器发送成功动作,如果请求成功,减少activeRequests
计数器。而.map
之后的CREATE_MODEL_SUCCESS
应该触发一个新的get请求,从api中获取一个新的模型列表。
问题在于,无论我做什么,无论我怎样尝试,我都无法同时运行GET_MODELS_REQUEST
和createModel
。
如果.do
函数的初始调用成功,我怎样才能确保两者都运行?
编辑:实际上看起来似乎console.log(true)
正在运行,因为如果我用({type: CREATE_MODEL_SUCCESS})
替换它我可以看到它运行,但它不会发送catch-throw
。
答案 0 :(得分:2)
您的do
功能无效:
.do(() => ({type: CREATE_MODEL_SUCCESS}))
它尝试返回一个值,但返回值将被忽略 - 因此没有任何反应。 do
运算符不能用于从observable发出不同的值,这是您尝试执行的操作。
请注意,如果您要将console.log
电话加入do
,您应该会看到它写入控制台。
如果要发出多个动作,可以使用以下内容:
@Effect() createModel$: Observable<Action> = this.actions$
.ofType(CREATE_MODEL_REQUEST)
.switchMap(action => this.modelsApi.createModel(action.payload))
.concatMap(() => Observable.from([
{ type: CREATE_MODEL_SUCCESS },
{ type: GET_MODELS_REQUEST }
]))
.catch((err: any) => Observable.of({ type: REQUEST_FAILURE, payload: err }));