Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular @effects内的嵌套http调用_Angular_Ngrx_Ngrx Store_Ngrx Effects - Fatal编程技术网

Angular @effects内的嵌套http调用

Angular @effects内的嵌套http调用,angular,ngrx,ngrx-store,ngrx-effects,Angular,Ngrx,Ngrx Store,Ngrx Effects,我有和angular2应用程序运行ngrx store,具有处理http请求的效果。对于简单的http请求,工作正常:请求->成功/失败操作,结束修改我的存储状态 我现在要做的是做第一个调用,它将返回一个person数组,对于返回的每个person,我需要做一个http调用,从他们那里获取一些额外的数据 我希望实现的是获取人员,在获取人员后立即获取额外数据,然后使用完整数据触发“成功”操作 这是一个简单的Person请求的原始效果。工作罚款: @Effect() requestManagers

我有和angular2应用程序运行ngrx store,具有处理http请求的效果。对于简单的http请求,工作正常:请求->成功/失败操作,结束修改我的存储状态

我现在要做的是做第一个调用,它将返回一个person数组,对于返回的每个person,我需要做一个http调用,从他们那里获取一些额外的数据

我希望实现的是获取人员,在获取人员后立即获取额外数据,然后使用完整数据触发“成功”操作

这是一个简单的Person请求的原始效果。工作罚款:

@Effect() requestManagers = this.action$
    .ofType(ContributionActions.FETCH_MANAGERS_REQUEST)
    .map(toPayload)
    .switchMap(payload => this.contributionsService.requestManagers()
        .map(res => this.contributionActions.fetchManagersReceive(res.json()))
        .catch(err =>
            this.errorHandler.handleError(err, 'There was an error retrieving your managers', this.contributionActions.fetchManagersFailed())
        )
    );
下面是我为收到的每个管理器执行http请求的尝试。使用forkJoin并行执行我从第一次调用中得到的n个管理器的“详细信息”调用

  • 对于第二个调用,我使用toPromise()http调用
  • forkJoin以获取所有已触发调用的结果
在返回行之前
返回this.contributionActions.fetchManagersReceive(managers)我可以打印变量“managers”,并使用原始数据加上“details”调用中的额外数据对其进行格式化,以便按预期工作

但是在调度“receive”操作时
this.contributionActions.fetchManagersReceive(managers)我得到以下错误:

Effect "ContributionEffects.requestManagers" dispatched an invalid action

@Effect() requestManagers = this.action$
    .ofType(ContributionActions.FETCH_MANAGERS_REQUEST)
    .map(toPayload)
    .switchMap(payload => this.contributionsService.requestManagers()
        .map(res => {
            const managers = res.json();
            const managersContributionsCallArray = [];

            managers.map(manager => {               
                const data = {
                    reviewId: manager.review_id
                }               
                managersContributionsCallArray.push(this.contributionsService.requestManagerContributionsPromise(data));                    
            });

            Observable.forkJoin(managersContributionsCallArray).subscribe(results => {
                for (var index = 0; index < managers.length; index++) {                     
                    managers[index]['contributions'] = results;                     
                }

                return this.contributionActions.fetchManagersReceive([managers]);

            });
        })
        .catch(err =>
            this.errorHandler.handleError(err, 'There was an error retrieving your managers', this.contributionActions.fetchManagersFailed())
        )
    );
Effect“ContributionEffects.requestManagers”调度了无效的操作
@Effect()requestManagers=this.action$
.of类型(贡献。获取管理者请求)
.map(toPayload)
.switchMap(有效负载=>this.contributionService.RequestManager()
.map(res=>{
const managers=res.json();
常量managersContributionsCallArray=[];
managers.map(manager=>{
常数数据={
reviewId:manager.review\u id
}               
managersContributionsCallArray.push(this.contributionsService.requestManagerContributionsPromise(数据));
});
Observable.forkJoin(managersContributionsCallArray).subscribe(结果=>{
对于(var index=0;index
this.errorHandler.handleError(err,“检索管理器时出错”,this.contributionActions.fetchManagersFailed())
)
);
这就是我到目前为止试图获得预期结果的方式,任何关于如何使这项工作的想法都将不胜感激

我还想知道是否有更好的方法来获得我所期待的同样的结果,因为我非常确信有一种更有效、更漂亮的方法来达到同样的效果

提前谢谢