将promise的返回值分配给变量always undefined ionic2

时间:2017-07-23 22:52:29

标签: angular typescript ionic2

我是Ionic世界的新手,当我在构造函数中调用一个函数时,我遇到了一些麻烦。 我正在制作一个为大学房间腾出空间的应用程序。我已经设置了我的Web服务并正在进行HTTP调用以获得答案,但在某些情况下,我需要保存这些返回的值,因此我不必每次都重做HTTP调用。但每当我尝试在promisse之外访问这些变量的值时,它们都会返回undefined。

以下是我正在做的事情,我的问题是:如何在我的变量中分配promise的返回值而不会丢失它的上下文。

export class MainPage{
  rooms: Array<Sala>; //array of rooms

  constructor(public navCtrl: NavController, public navParams: NavParams, public connection: ConnectionService) {
    this.callLoadRoom();
  }

  callLoadRoom() {
    var that = this;
    this.connection.loadRoom()
      .then( (data: Array<Sala>) => {
        that.rooms = data;
      }, (error) => {
        console.log("Load Rooms Error!", error);
      });
  }

  printRooms(){
    console.log(this.rooms)
  }
} 

连接类是执行对Web服务的HTTP调用的提供程序。以下是我的工作方式:

loadRoom() {
    return new Promise((resolve, reject) => {
      this.http.get(this.baseUri+'sala/carregarSala')
        .map(res => res.json())
        .subscribe(data => {
          resolve(data);
        },
        error => {
          reject(error);
        });
    });
  }

谢谢大家!

1 个答案:

答案 0 :(得分:1)

不要使用var that = this没有必要,直接使用this

您的loadRoom()方法可以清除,如:

loadRoom() {
  return this.http.get(this.baseUri+'sala/carregarSala')
    .map(res => res.json())
    .toPromise()
    .catch(err => {
       // handle error here
    }
}

有关.toPromise() in this question

的更多信息

您可以看到live plunker demo here