【发布时间】:2017-01-22 16:31:23
【问题描述】:
我在 Ionic2 工作,我遇到了这个问题:
在我的组件中有 drawPlayer 方法,它从 firebase 数据库中检索数据。
这是它的代码:
drawPlayer(){
this.playerData.drawThePlayer().on('value', snapshot => {
// some stuff
});
return this.drawnPlayer; // returns the player name
}
在 ngOnInit 函数内的同一个文件(组件)中,我需要调用 drawPlayer() 并且我这样做:
ngOnInit(){
let myVar = this.drawPlayer();
console.log("test: "+myVar);
}
如果我检查我阅读的控制台test: undefined,如果我返回并再次返回该页面,我会看到test: a correct value。我认为这是因为 drawPlayer() 是一个异步调用,而当我执行 console.log 时,它还没有返回结果。
那么,我怎样才能在drawPlayer() 完成后才console.log?
/**************************************************** *******************************/
编辑:(在 httpNick 回答之后)
现在我有了这个带有完整代码的drawPlayer() 方法(this.drawnPlayer 是从这些方法中全局定义的):
drawPlayer(cb){
this.playerData.drawThePlayer().on('value', snapshot => {
var data = snapshot.val();
for (var key in data){
this.drawnPlayer = String(data[key].lastName);
console.log("playerName: "+this.drawnPlayer);
}
});
console.log("test: "+this.drawnPlayer);
cb(this.drawnPlayer); // returns the player name
}
ngOnInit() 是这样的:
this.drawPlayer(function(valueFromDrawPlayer) {
console.log("callback result: "+valueFromDrawPlayer);
});
console.log("after the callback");
当我运行应用程序时,这是我在浏览器控制台中看到的:
test: undefined
callback result: undefined
after the callback
EXCEPTION: Error: Uncaught (in promise): TypeError: Cannot read property '0' of undefined
playerName: John
但我希望读到这个:
playerName: John
test: John
callback result: John
after the callback
【问题讨论】:
标签: javascript angular typescript ionic2