У меня проблема, когда я вызываю свой веб-сервис в Angular2. Моя переменная this.arc
всегда пуста, потому что функция get()
является асинхронной и возвращает переменную непосредственно перед ответом webservice.Назначить значение, возвращаемое методом подписки Http в Angular2
Я не знаю, как с этим справиться. Я видел некоторые данные о 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;
}
---- EDIT ----
Я думаю, что проблема в вызове функции:
public getData (lat,lng) {
var closedArc = this.arcService.getArcs(lat,lng);
console.log(closedArc);
//this.showArc(closedArc);
}
Thx для вашего ответа! но ничего не меняет. Я отредактировал сообщение. Я подозреваю, что проблема связана с вызовом 'getArcs()' –
. Да, вы возвращаете пустой массив, прежде чем 'http.get()' будет разрешен. Вы можете переместить весь блок 'subscribe()' в функцию 'getData()': 'closedArc.subscribe (....)' и позволить 'getArcs()' возвращать Observable 'return this.http.get (url) '. Я уточню свой ответ. – Sasxa
Это работает! Благодаря ! Я понимаю свою ошибку. И спасибо за ваши объяснения. –