有人可以解释一下如何在 Angular2 和 Firebase 中正确实现 Promise。
我读过一些类似这样的文章 https://www.firebase.com/blog/2016-01-21-keeping-our-promises.html
在我的 app.component.ts 文件中我有这个
export class AppComponent{
players: Player[];
constructor(private _playerService: PlayerService){}
getPlayers(){
this._playerService.getPlayers().then(res => this.players = res);
}
ngOnInit(){
this.getPlayers();
}
}
在player.service.ts文件中我有这个
getPlayers() {
this.playersRef.once('value', function (snap){
return snap.val();
});
}
我总是收到 TypeError: this._playerService.getPlayers(...) is undefined
我也按照上面的文章的建议尝试了这个
getPlayers() {
var data;
this.playersRef.once('value').then( function (snap){
data = snap.val();
});
return data;
}
但是后来我得到了这个:错误:Query.once 失败:用 1 个参数调用。预计至少 2. in [null]
我不确定这篇文章是如何与 .once('value').then() 一起工作的
最佳答案
出现问题是因为您尝试在未使用 Promise 的方法上使用 .then
。基本上错过了从 getPlayers
方法返回 promise
,您应该从那里返回 Promise,以便使用 .then
方法执行 Promise 链。
也不要使用回调从中返回值(因为回调无法从中返回任何内容),请使用 .then
函数而不是 .once
以便您可以扩展 promise 链并且能够正确返回数据。
代码
getPlayers() {
//returned promise here
return this.playersRef.once('value').then((snap) => {
return snap.val();
});
}
关于firebase - Angular2 中的 Promise 与 firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36435647/