角度2效果不运行功能

时间:2016-11-11 09:07:30

标签: angular ngrx

我得到了这个效果:

@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_REQUESTcreateModel

如果.do函数的初始调用成功,我怎样才能确保两者都运行?

编辑:实际上看起来似乎console.log(true)正在运行,因为如果我用({type: CREATE_MODEL_SUCCESS})替换它我可以看到它运行,但它不会发送catch-throw

1 个答案:

答案 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 }));