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_SUCCESS
和 GET_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 }));
我得到了这个效果:
@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_SUCCESS
和 GET_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 }));