nos*_*sTa 6 rxjs ionic-framework ngrx angular
我试图调用多个操作并等待它们完成,直到我返回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);
})
Run Code Online (Sandbox Code Playgroud)
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)
})
Run Code Online (Sandbox Code Playgroud)
AppAction:
export class SyncMasterdata implements Action
{
readonly type = SYNC_MASTERDATA;
}
Run Code Online (Sandbox Code Playgroud)
BarcodeConfigAction:
export class Sync implements Action
{
readonly type = SYNC;
}
Run Code Online (Sandbox Code Playgroud)
这样就不会调用barcodeconfigeffect - > sync.如果我删除forkjoin并发布Observable.of(新的BarcodeConfigActions.Sync)它可以工作,但我无法分派更多的动作.
谢谢 :)
如果我正确理解问题,您似乎想确保BarcodeConfigActions.SyncSuccess(在 BarcodeConfigEffect 中)在您的(在 AppEffect 中)之前调度AppActions.SyncingSuccess。这是为了确保您已收到getBarcodeConfig?
您的解决方案的问题在于您正在 forkJoining 一个操作 ,BarcodeConfigActions.Sync然后在AppActions.SyncingSuccess返回之前将该操作映射到 。这意味着BarcodeConfigActions.Syncnever 会在 observable 上发出actions$,这是您在BarcodeConfigEffect.
如果您的syncMasterData$effects\xc2\xb4 唯一的逻辑是确保调用BarcodeConfigActions.SyncSuccessBEFORE AppActions.SyncingSuccess,也许只需在您的 ? 中调度两个操作 forkJoined BarcodeConfigEffect?
@Effect() sync$ = this.actions$\n.ofType<BarcodeConfigActions.Sync>(BarcodeConfigActions.SYNC)\n.mergeMap(() => this.apiProvider.getBarcodeConfig())\n.map((barcodeConfigs: BarcodeConfig[]) =>\n{\n let barcodeConfigState = <barcodeConfig.State>{};\n barcodeConfigState.tenant = "COOKIE";\n barcodeConfigState.barcodeConfig = barcodeConfigs;\n /* NEW RETURN */\n return Observable.forkJoin(\n new AppActions.SyncingSuccess(),\n new BarcodeConfigActions.SyncSuccess({ barcodeConfigs: barcodeConfigState }));\n})\n.catch((error) =>\n{\n this._store.dispatch(new AppActions.UnexpectedError(error));\n return Observable.of(new BarcodeConfigActions.SyncFailed)\n})\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |