Angular 角度/w ngrx-连续API调用
我正在Angular 4应用程序中实现ngrx。redux相关部分的代码结构基于ngrx repo()的示例应用程序。现在我想知道如何实现这样的功能:Angular 角度/w ngrx-连续API调用,angular,redux,ngrx,Angular,Redux,Ngrx,我正在Angular 4应用程序中实现ngrx。redux相关部分的代码结构基于ngrx repo()的示例应用程序。现在我想知道如何实现这样的功能: 我有某种实体的形式 在提交时,我向API发送POST请求,请求中只包含该实体的名称 作为响应,我获取新创建实体的id 紧接着,我想发送第二个请求,其中包含表单的其余值和我刚得到的id 我应该将第二个请求放在何处以及如何放置?如何实现连续的API调用取决于调用的内聚性。 我的意思是,您是否将这两个调用视为一个“事务”,其中两个请求都必须成功才能成功
我应该将第二个请求放在何处以及如何放置?如何实现连续的API调用取决于调用的内聚性。
我的意思是,您是否将这两个调用视为一个“事务”,其中两个请求都必须成功才能成功更改您的状态 显然,如果第一个请求失败,第二个请求将无法启动,因为它依赖于第一个请求中的数据。但是 当第一个请求成功而第二个请求失败时会发生什么 您的应用程序是否可以仅使用第一个请求中的
id
而不使用第二个请求继续工作,或者是否会以不一致的状态结束
我将介绍两种情况:
@Injectable()
出口邮递服务{
私有API_URL1=http://your.api.com/resource1';
私有API_URL2=http://your.api.com/resource2';
构造函数(私有http:http){}
postCombined(formValues:{name:string,age:number}):可观察的{
返回this.http.post(this.API_URL1,{name:formValues.name})
.map(res=>res.json())
.switchMap(post1result=>
this.http.post(this.API_URL2{
/*访问post1result和formValues*/
id:post1result.id,
年龄:formValues.age,
时间戳:新日期()
})
.map(res=>res.json())
.mergeMap(post2result=>Observable.of({
/*访问post1result和post2result*/
id:post1result.id,
名称:post1result.name,
年龄:2岁后结果年龄,
时间戳:post2result.timestamp
})
);
}
}
现在,您可以像ngrx示例应用程序中显示的任何其他服务方法一样使用后组合
-方法
- 如果任何一个请求失败,服务将抛出一个错误,您可以捕获并处理该错误
- 如果两个请求都成功,您将返回
中定义的数据。如您所见,可以从两个请求响应返回合并数据mergeMap
@Injectable()
出口邮递服务{
私有API_URL1=http://your.api.com/resource1';
私有API_URL2=http://your.api.com/resource2';
构造函数(私有http:http){}
post1(formValues:{name:string}):可观察{
返回this.http.post(this.API_URL1,formValues).map(res=>res.json());
}
post2(receivedId:number,formValues:{age:number}):可观察{
返回this.http.post(this.API_URL2{
id:receivedId,
年龄:formValues.age,
时间戳:新日期()
})
.map(res=>res.json());
}
}
接下来,为两个请求定义请求、成功和失败操作:
post.actions.ts
从'@ngrx/store'导入{Action};
导出常量POST1_请求='POST1_请求';
导出常量POST1_SUCCESS='POST1_SUCCESS';
导出常量POST1_FAILURE='POST1_FAILURE';
export const POST2_REQUEST='POST2_REQUEST';
导出常量POST2_SUCCESS='POST2_SUCCESS';
导出常量POST2_FAILURE='POST2_FAILURE';
导出类Post1RequestAction实现操作{
只读类型=POST1\U请求;
构造函数(公共负载:{name:string,age:number}){}
}
导出类Post1SuccessAction实现操作{
只读类型=POST1\u成功;
构造函数(公共负载:{id:number}){}
}
导出类Post1FailureAction实现操作{
只读类型=POST1\U故障;
构造函数(公共错误:any){}
}
导出类Post2RequestAction实现操作{
只读类型=POST2_请求;
构造函数(公共负载:{id:number,name:string,age:number}){}
}
导出类Post2SuccessAction实现操作{
只读类型=POST2_成功;
构造函数(公共有效负载:any){}
}
导出类Post2FailureAction实现操作{
只读类型=POST2_故障;
构造函数(公共错误:any){}
}
导出类型操作
=后1请求
|1成功后
|1失败后的行动
|后2请求
|2成功后
|后2失败行动
现在我们可以定义两种效果,它们将在发送请求操作时运行,然后根据se的结果发送成功或失败操作