Angular 2 效果没有 运行 起作用

Angular 2 effect doesn't run do function

我得到了这个效果:

@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 reducer 发送成功操作,如果请求成功,它会减少 activeRequests 计数器。之后的 .map 应该会触发一个新的获取请求,该请求会从 api.

中获取新的模型列表

问题是无论我做什么,我都无法将 CREATE_MODEL_SUCCESSGET_MODELS_REQUEST 都变成 运行,无论我怎么尝试。

如果 createModel 函数的初始调用成功,我如何确保两者都是 运行?

编辑: 它实际上看起来 .do 是 运行 因为如果我用 console.log(true) 替换它我可以看到它 运行s,但它不发送 ({type: CREATE_MODEL_SUCCESS})

您的 do 函数没有执行任何操作:

.do(() => ({type: CREATE_MODEL_SUCCESS}))

它尝试 return 一个值,但是 return 值将被忽略 - 所以没有任何反应。 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 }));