赋值 Angular 2 中 Http 订阅方法返回的值
Assign value returned by Http subscribe method in Angular2
我在 Angular2 中调用我的网络服务时遇到问题。我的变量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。这是一个很好的做法 - 让服务返回可观察量,并在需要数据时订阅它们。
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方法返回全局变量
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 修复AngularJS错误:提供程序必须从$get工厂方法返回值
- 从 javascript 中的对象方法返回一个对象
- 为什么我的Mongoose findAll方法返回500错误.
- 角度方法返回未绘制的代码
- 解析查询查找方法返回对象而不是数组
- Jquery Ajax调用没有't点击操作方法/返回整个HTML页面
- ajax方法返回错误时如何打印输出
- Meteor 方法返回客户端和服务器上的不同对象
- 如何将异步方法返回的值发送到javascript中的另一个异步方法
- Javascript getDay方法返回错误的数字
- Coffeescription类中的方法返回函数而不是字符串
- 当使用Q/promises/异步函数时,如何将一个值从一个类方法返回到另一个类
- find()方法返回具有不需要的属性的对象
- 如何在JSF中将toDataURL方法返回的画布内容作为图像存储在磁盘上
- 从请求.js请求方法返回结果
- jQuery的.children()方法返回'undefined'
- Angularjs 控制器在服务方法返回之前从服务中分配变量