加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – ngrx4效果中的多个动作 – > forkJoin无法按预期

发布时间:2020-12-17 06:59:46 所属栏目:安全 来源:网络整理
导读:我试图调用多个操作并等待它们完成,直到我返回SYNC_SUCCESS操作并关闭加载屏幕.但我无法让它发挥作用. 有什么建议我在这里做错了吗? AppEffect: @Effect()syncMasterData$= this.actions$ .ofTypeAppActions.SyncMasterdata(AppActions.SYNC_MASTERDATA) .
我试图调用多个操作并等待它们完成,直到我返回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)
})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读