如何以角度2

时间:2016-08-10 13:50:54

标签: angular angular2-observables

此问题已经被问到here。但是,由于提问者的申请背景涉及的问题太多,我无法理解基本知识。例如,有一个queryArr参数。它做了什么?

无论如何,我需要一些关于如何以最简单的方式进行同步http调用的指导。我想出的解决方案是,必须在"嵌套"中订阅observable。订购。例如,有可观察的oxoyoy中调用的请求数据取决于来自ox的数据:

xData: string = "";
yData: string = "";  

ox.subscribe(
    data => {xData = data;},
    error => console.log(error),
    () => {
        oy.subscribe(
            data => {yData = xData*data;},
            error => console.log(error),
            () => console.log("aaa")
        );
    }
);

上次我记得(我不会做很多javascript,而且是一个新手),在我订阅oyxDatayData的范围内再也见不到了。如果我错了,请纠正我并指出正确的方向。

有没有"罚款"解决方案或更好的方法来做这种事情?

1 个答案:

答案 0 :(得分:9)

我认为您可以查看flatMap运算符来执行HTTP请求,等待其响应并执行另一个。

以下是一个示例:

executeHttp(url) {
  return this.http.get(url).map(res => res.json());
}

executeRequests() {
  this.executeHttp('http://...').flatMap(result => {
    // result is the result of the first request
    return this.executeHttp('http://...');
  }).subscribe(result => {
    // result is the result of the second request
  });
}

如果您希望使用subscribe方法访问这两个结果,则可以使用Observable.forkJoinObservable.of

executeRequests() {
  this.executeHttp('http://...').flatMap(result => {
    // result is the result of the first request
    return Observable.forkJoin(
      Observable.of(result),
      this.executeHttp('http://...')
    ).subscribe(results => {
    // results is an array of the results of all requests
    let result1 = results[0];
    let result2 = results[1];
  });
}