Angular 角承诺回报

Angular 角承诺回报,angular,typescript,promise,Angular,Typescript,Promise,我有一个Angular服务,我想用类型化数组返回一个承诺,但我总是遇到这样的错误:src/app/city.Service.ts(52,22):错误TS2339:类型“CityService”上不存在属性“places”。 我不知道我做错了什么 getPlace(coordinates : Coordinates) { // var places : Array<Place> = []; let promise = new Promise((resolve, reject)

我有一个Angular服务,我想用类型化数组返回一个承诺,但我总是遇到这样的错误:src/app/city.Service.ts(52,22):错误TS2339:类型“CityService”上不存在属性“places”。 我不知道我做错了什么

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;
}
getPlace(坐标:坐标){
//变量位置:数组=[];
让承诺=新承诺((解决、拒绝)=>{
this.http.get('http://localhost:3000/api/place/“,{params:coordinates})
.toPromise()
.那么(
res=>{//Success
变量位置:数组;
this.places=res.results.map(项=>{
var place=新位置();
place.place\u id=item.place\u id;
place.name=item.name;
place.Neighborary=项目.Neighborary;
place.coordinates=新坐标();
place.coordinates.lation=item.geometry.location.lat;
place.coordinates.longitude=item.geometry.location.lng;
返回地点;
});
解决(这个地方);
},
msg=>{//错误
拒绝(味精);
}
);
});
回报承诺;
}

因此注释非常正确,必须在不使用此关键字的情况下调用不属于服务一部分且在函数中声明的变量

 places = res.results.map ....

因此,注释是非常正确的,不属于服务的一部分并且在函数中声明的变量必须在不使用此关键字的情况下调用

 places = res.results.map ....
这是第二个答案,只是关于不必要的承诺创造 这会产生相同的结果,而不需要手动创建新的承诺,当内部承诺解决时,新的承诺就会解决。它减少了代码样板,提高了可读性

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

}
这是第二个答案,只是关于不必要的承诺创造 这会产生相同的结果,而不需要手动创建新的承诺,当内部承诺解决时,新的承诺就会解决。它减少了代码样板,提高了可读性

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

}


您的服务是否有一个名为
places
的字段,或者您的功能是否应该使用
places
而不是
this.places
?为什么您要手动创建一个可观察的,当内部http解析时解析,当内部拒绝时拒绝?你为什么不直接使用http协议?@NoémiSalaün rookiemistake@NoémiSalaün如果我不想创建一个可观察的,我可以使用内部http解析吗@John在下面看到我的答案您的服务是否有一个名为
places
的字段,或者您的函数是否应该使用
places
而不是
this.places
?为什么您要手动创建一个可观察的,在内部http解析时解析,在内部拒绝时拒绝?你为什么不直接使用http协议?@NoémiSalaün rookiemistake@NoémiSalaün如果我不想创建一个可观察的,我可以使用内部http解析吗@约翰:下面是我的答案,谢谢。我这里只有一个错误:places=res.results.map…错误TS2339:类型“Object”上不存在属性“results”。谢谢。我这里只有一个错误:places=res.results.map…错误TS2339:类型“Object”上不存在属性“results”。现在我有这个错误:src/app/city.service.ts(58,28)中有错误:错误TS2339:类型“Object”上不存在属性“results”。我有以下导入:mport{HttpClient}from'@angular/common/http';从'@angular/common/http'导入{HttpHeaders};从'@angular/common/http'导入{HttpParams};从“rxjs/operators”导入{catchError,map,tap};我的示例中可能有一个输入错误,因为我没有更改这部分的任何逻辑:/I我会找出它。非常感谢你的帮助!现在我有了这个错误:src/app/city.service.ts(58,28)中的错误:错误TS2339:类型“Object”上不存在属性“results”。我有以下导入:mport{HttpClient}来自“@angular/common/http”;从'@angular/common/http'导入{HttpHeaders};从'@angular/common/http'导入{HttpParams};从“rxjs/operators”导入{catchError,map,tap};我的示例中可能有一个输入错误,因为我没有更改这部分的任何逻辑:/I我会找出它。非常感谢你的帮助!