2017-07-23 58 views
1

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

以下是我正在做的事情,我的问题是:如何在不损失上下文的情况下为我的变量指定承诺的返回值。

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

感谢每一个!

+0

***但每一次我尝试访问的值这些变量在promisse之外,它们返回undefined。***什么时候你试图访问它,我可以看到在哪里,但是这是一个点击事件还是什么时候调用了printRooms()? – Alex

+0

让我们假设printRooms()函数在callLoadRoom()函数后面调用,我需要在ROOMS向量中分配的值可用于执行其他操作。你能帮助我吗? –

+0

我也许会看到这是一个副本:https://stackoverflow.com/questions/43055706/how-do-i-return-the-response-from-an-observable-http-async-call-in -angular2这是异步的本质,你不能确定值是否以任何其他方式存在,而不是恰当地链接它。有一些rxjs函数可以帮助解决这个问题,但是由于不知道确切的用例(何时/如何调用printRooms()),所以没有确切的用例,这是我可以提供的最好的:) – Alex

回答

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

+1

需要返回承诺在你清理'loadRoom()' – Duncan

+0

啊是的,谢谢你 - 我把它固定在蹲点,忘了更新答案! – 0mpurdy