我有一个Angular服务,我想返回一个带有Typed数组的承诺,但我总是得到这个错误:src / app / city.service.ts(52,22):error TS2339:Property'place'在'CityService'类型中不存在。 我不知道我做错了什么。
getPlace(coordinates : Coordinates) {
// var places : Array<Place> = [];
let promise = new Promise((resolve, reject) => {
this.http.get('http://localhost:3000/api/place/', {params: coordinates})
.toPromise()
.then(
res => { // Success
var places: Array<Place>;
this.places = res.results.map(item => {
var place = new Place();
place.place_id = item.place_id;
place.name = item.name;
place.vicinity = item.vicinity;
place.coordinates = new Coordinates();
place.coordinates.latitude = item.geometry.location.lat;
place.coordinates.longitude = item.geometry.location.lng;
return place;
});
resolve(this.places);
},
msg => { // Error
reject(msg);
}
);
});
return promise;
}
答案 0 :(得分:3)
因此注释非常正确,不是服务的一部分的变量,并且在函数内部声明的变量必须在没有此关键字的情况下调用。
places = res.results.map ....
答案 1 :(得分:1)
这给出了相同的结果,无需手动创建新的Promise,在内部promise解析时解析。它导致更少的代码样板和更好的可读性。
getPlace(coordinates : Coordinates) {
return this.http.get('http://localhost:3000/api/place/', {params: coordinates})
.toPromise()
.then(res => {
var places: Place[];
places = res.results.map(item => {
var place = new Place();
place.place_id = item.place_id;
place.name = item.name;
place.vicinity = item.vicinity;
place.coordinates = new Coordinates();
place.coordinates.latitude = item.geometry.location.lat;
place.coordinates.longitude = item.geometry.location.lng;
return place;
});
return places;
});
}