Angular @effects内的嵌套http调用
我有和angular2应用程序运行ngrx store,具有处理http请求的效果。对于简单的http请求,工作正常:请求->成功/失败操作,结束修改我的存储状态 我现在要做的是做第一个调用,它将返回一个person数组,对于返回的每个person,我需要做一个http调用,从他们那里获取一些额外的数据 我希望实现的是获取人员,在获取人员后立即获取额外数据,然后使用完整数据触发“成功”操作 这是一个简单的Person请求的原始效果。工作罚款: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
@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())
)
);
这就是我到目前为止试图获得预期结果的方式,任何关于如何使这项工作的想法都将不胜感激
我还想知道是否有更好的方法来获得我所期待的同样的结果,因为我非常确信有一种更有效、更漂亮的方法来达到同样的效果
提前谢谢