Angular 2:当第一个服务成功时,两个后端服务调用
Angular 2: Two backend service calls on success of first service
在我的Angular 2应用程序中,我有如下后端服务。
getUserInterests() {
return this.http.get('http://localhost:8080/test/selections').map((res: Response) => res.json());
}
在呼叫此服务后,我想在前一个服务成功后再呼叫另一个服务。
第二次服务
let params: URLSearchParams = new URLSearchParams();
params.set('access_token', localStorage.getItem('access_token'));
return this.http.get('http://localhost:8080/user/selections', { search: params }).map((res: Response) => res.json());
这两个服务分别返回两个JSON数组。然后我需要用这两个数组进行一些登录。
已编辑
服务.ts
getUserInterests() {
return this.http.get('http://localhost:8080/test/selections').map((res: Response) => res.json());
}
getSavedSelections() {
let params: URLSearchParams = new URLSearchParams();
params.set('access_token', localStorage.getItem('access_token'));
return this.http.get('http://localhost:8080/interest/user/selections', { search: params }).map((res: Response) => res.json());
}
getSelectionList() {
var obs = this.getUserInterests().flatMap(
(interests) => {
return Observable.forkJoin([
Observable.of(interests),
this.getSavedSelections()
]);
}
);
return obs;
}
然后我在我的另一个ts文件中使用以下内容来调用该服务。
export class InterestsComponent {
private interests;
private saved_interests;
constructor(private dataService: DataService) {
this.dataService.getSelectionList().subscribe(
(result) => {
var interests = result[0];
var selections = result[1];
}
);
}
}
但这在控制台日志中给出了以下错误。
ORIGINAL EXCEPTION: TypeError: this.dataService.getSelectionList is not a function
欢迎提出任何建议。
您需要利用flatMap
运算符在上一个请求完成后调用一个请求:
this.service.getUserInterests().flatMap(
(interests) => {
let params: URLSearchParams = new URLSearchParams();
params.set('access_token', localStorage.getItem('access_token'));
return this.http.get('http://localhost:8080/user/selections', {
search: params
}).map((res: Response) => res.json());
}
);
订阅此数据流时,您将只收到上一次请求的结果。
您可以使用Observable.forkJoin
方法来同时返回这两个值。这是一个示例:
var obs = this.service.getUserInterests().flatMap(
(interests) => {
return Observable.forkJoin([
Observable.of(interests),
this.service.getUserSelections()
]);
}
);
obs.subscribe(
(result) => {
var interests = result[0];
var selections = result[1];
}
);
相关文章:
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- Angular 2:当第一个服务成功时,两个后端服务调用
- 如何在两个连续的角度服务呼叫期间中止/取消第一个呼叫的承诺
- 将单个服务逻辑应用于两个类似的按钮
- 开发两个单独的节点应用程序来提供 Web 服务和使用 Web 服务以在浏览器上呈现它是一个好主意吗?
- 在两个不同的模块和两个不同的js文件之间共享服务
- 发布绑定/监视两个控制器之间共享的服务变量
- 为什么我的两个不同angularjs服务解析为同一个restful Java EE web服务
- 将一个服务(工厂)注入到另一个服务中,这两个服务都是异步的
- 同步与服务链接的两个AngularJS控制器
- 如何在AngularJS中将数据从同一服务加载到两个不同的作用域变量
- asp.net→javascript→网络服务→从webservice调用返回两个类
- 如何将js从两个独立的服务精简到前端协同工作
- 用jasmine对位于不同模块的两个服务进行单元测试
- 使用node/express/jade,如何服务两个javascript文件中的一个,取决于第一个是否存在
- AngularJS:通过服务在两个作用域/控制器之间进行双向通信
- AngularJS:如何在两个隔离的控制器和一个共享服务之间创建一个双向数据绑定
- Azure移动服务-读取两个表并返回自定义响应对象
- 两个Node服务器可以同时运行并交互吗,这样其中一个服务器就是为客户端服务的中介
- 在angularjs中,如何在服务的两个函数之间传递数据?