Angular承诺回归

时间:2018-03-03 21:50:00

标签: angular typescript promise

我有一个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;
}

2 个答案:

答案 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;
        });

}