javascript - 为 Angular2 中的 Http subscribe 方法返回的值赋值

标签 javascript http variables angular

当我在 Angular2 中调用 Web 服务时遇到问题。我的变量 this.arc 始终为空,因为函数 get() 是异步的,它会在 Web 服务响应之前直接返回变量。

我不知道如何处理这个问题。 我看到了一些关于 defer 的信息,但我认为这不是最好的方法。

谢谢!

getArcs (lat,lng) {
    var url = "http://localhost:8081/api/v1/arcs?lat="+lat+"&lng="+lng;
    this.arcs = [];

    /*var options = new RequestOptions({
        headers: new Headers({
            'Content-Type': 'application/json;charset=UTF-8'
        })
    });*/

    this.http.get(url)
    .subscribe(
            (data: any) => {
                JSON.parse(data._body).forEach(arc => {
                    //console.log(new Arc(arc));
                    this.arcs.push(new Arc(arc)); //add arcs
                });
                console.log("send");

            },
            error => {
                console.log("error during http request");
            }
        );
    return this.arcs;
}

---- 编辑----

我认为问题出在函数的调用上:

public getData (lat,lng) {
    var closedArc = this.arcService.getArcs(lat,lng);

    console.log(closedArc);

    //this.showArc(closedArc);
}

最佳答案

由于您确实需要 getData() 函数中的数据,因此您可以将订阅逻辑移至此处,并让 getArcs() 返回一个 Observable。这是一个很好的实践 - 让服务返回 Observables 并在需要数据时订阅它们。

getArcs(lat, lng) {
  var url = "http://localhost:8081/api/v1/arcs?lat=" + lat + "&lng=" + lng;

  return this.http
    .get(url)
    .map(response => response.json()) // response has builtin method to parse json.
    .map(arc => {
      return new Arc(arc);
    })
}

public getData(lat, lng) {
  var closedArc;
  this.arcService
    .getArcs(lat, lng)
    .subscribe(
      arcs => closedArc = arcs, // success
      error => console.log("error during http request"), // error
      () => this.showArc(closedArc) // complete
    )
}

关于javascript - 为 Angular2 中的 Http subscribe 方法返回的值赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35036291/

相关文章:

javascript - 如何修改Javascript异常

javascript - 使用成功方法不使用 $http.get 从 json-angularjs 调用到外部 url 获取 json 数据

javascript - 如何修复react-native中的TypeError : Converting circular structure to JSON at JSON. stringify (<anonymous>)

javascript - 如何跨多个选项卡保存 greasemonkey 输出

java - 你怎么知道java中的变量类型?

javascript - 检查 dropzone 中的文件类型

wcf - WSHttpBinding 和 HTTP 和 Windows 身份验证

C HTTP 服务器/连接重置

c# - 如何使用 ASP.NET Core 从查询字符串中读取值?

ruby - 从外部访问类的实例变量