angular – ngrx4效果中的多个动作 – > forkJoin无法按预期
我试图调用多个操作并等待它们完成,直到我返回SYNC_SUCCESS操作并关闭加载屏幕.但我无法让它发挥作用.
有什么建议我在这里做错了吗? AppEffect: @Effect() syncMasterData$= this.actions$ .ofType<AppActions.SyncMasterdata>(AppActions.SYNC_MASTERDATA) .mergeMap(() => { return Observable.forkJoin( Observable.of(new BarcodeConfigActions.Sync) ).map(() => new AppActions.SyncingSuccess); }) BarcodeConfigEffect @Effect() sync$= this.actions$ .ofType<BarcodeConfigActions.Sync>(BarcodeConfigActions.SYNC) .mergeMap(() => this.apiProvider.getBarcodeConfig()) .map((barcodeConfigs: BarcodeConfig[]) => { let barcodeConfigState = <barcodeConfig.State>{}; barcodeConfigState.tenant = "COOKIE"; barcodeConfigState.barcodeConfig = barcodeConfigs; return new BarcodeConfigActions.SyncSuccess({ barcodeConfigs: barcodeConfigState }); }) .catch((error) => { this._store.dispatch(new AppActions.UnexpectedError(error)); return Observable.of(new BarcodeConfigActions.SyncFailed) }) AppAction: export class SyncMasterdata implements Action { readonly type = SYNC_MASTERDATA; } BarcodeConfigAction: export class Sync implements Action { readonly type = SYNC; } 那样barcodeconfigeffect – >不会调用同步.如果我删除forkjoin并发布Observable.of(新的BarcodeConfigActions.Sync)它可以工作,但我无法分派更多的动作. 谢谢 :) 解决方法
如果我正确理解了问题,您似乎想确保在AppActions.SyncingSuccess(在AppEffect中)之前调度BarcodeConfigActions.SyncSuccess(在BarcodeConfigEffect中).这是为了确保您已收到getBarcodeConfig?
您的解决方案的问题是您在forkJoining单个操作BarcodeConfigActions.Sync,然后在返回之前将该操作映射到AppActions.SyncingSuccess.这意味着BarcodeConfigActions.Sync永远不会在$observable动作上发出,这是您在BarcodeConfigEffect中使用的可观察对象. 如果你的syncMasterData $effects’唯一的逻辑是确保在AppActions.SyncingSuccess之前调用BarcodeConfigActions.SyncSuccess,或许只是在你的BarcodeConfigEffect中调度forkJoined这两个动作? @Effect() sync$= this.actions$ .ofType<BarcodeConfigActions.Sync>(BarcodeConfigActions.SYNC) .mergeMap(() => this.apiProvider.getBarcodeConfig()) .map((barcodeConfigs: BarcodeConfig[]) => { let barcodeConfigState = <barcodeConfig.State>{}; barcodeConfigState.tenant = "COOKIE"; barcodeConfigState.barcodeConfig = barcodeConfigs; /* NEW RETURN */ return Observable.forkJoin( new AppActions.SyncingSuccess(),new BarcodeConfigActions.SyncSuccess({ barcodeConfigs: barcodeConfigState })); }) .catch((error) => { this._store.dispatch(new AppActions.UnexpectedError(error)); return Observable.of(new BarcodeConfigActions.SyncFailed) }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |