Angular 2:第一个服务成功时的两个后端服务调用
在我的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数组。 然后我需要用这两个数组做一些login。
EDITED
service.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
任何build议表示赞赏。
在完成上一个请求之后,您需要使用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()); } );
订阅此数据stream时,您只会收到最后一个请求的结果。
您可以使用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]; } );
- 无法绑定到“formGroup”,因为它不是“form”的已知属性
- AngularJS:使用$ resource上传文件(解决scheme)
- 什么是在angular2中相当于httpinterceptor?
- Angular 2.0的风格绑定值
- Webrick作为生产服务器与薄型还是独angular兽?
- 在量angular器中,browser.isElementPresent vs element.isPresent vs element.isElementPresent
- 使用基于数字的ngFor多次重复HTML元素
- 什么是angular度平台浏览器?
- 我如何做一个圆angular的UIImage / -View CGRect(Swift)