Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Javascript 角度2:第一个服务成功时两个后端服务调用_Javascript_Angular_Angular Services - Fatal编程技术网

Javascript 角度2:第一个服务成功时两个后端服务调用

Javascript 角度2:第一个服务成功时两个后端服务调用,javascript,angular,angular-services,Javascript,Angular,Angular Services,在我的Angular 2应用程序中,我有如下后端服务 getUserInterests() { return this.http.get('http://localhost:8080/test/selections').map((res: Response) => res.json()); } 调用此服务后,我想在前一个服务成功后调用另一个服务 第二次服务 let params: URLSearchParams = new URLSearchParams(); param

在我的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];
  }
);

您需要利用
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];
  }
);

什么是兴趣?如何获取两个服务的响应?
兴趣
对应于第一个请求的结果。我更新了我的答案,以描述如何在订阅回调中获取两个请求的结果…如果您需要两个响应内容,是;-)什么是兴趣?如何获取两个服务的响应?
兴趣
对应于第一个请求的结果。我更新了我的答案,以描述如何在订阅回调中获取两个请求的结果…如果您需要两个响应内容,是;-)