带有 firebase 的 angular2 中的承诺
Promises in angular2 with firebase
谁能解释一下如何在 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
方法错过了 return promise
,你应该 return 从那里承诺使用 .then
方法对其执行承诺链接。
也不要使用回调到return值(因为回调不能return从它获取任何东西),使用.then
函数而不是.once
这样你就可以扩展承诺链 & 将能够 return 正确输出数据。
代码
getPlayers() {
//returned promise here
return this.playersRef.once('value').then((snap) => {
return snap.val();
});
}
谁能解释一下如何在 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
方法错过了 return promise
,你应该 return 从那里承诺使用 .then
方法对其执行承诺链接。
也不要使用回调到return值(因为回调不能return从它获取任何东西),使用.then
函数而不是.once
这样你就可以扩展承诺链 & 将能够 return 正确输出数据。
代码
getPlayers() {
//returned promise here
return this.playersRef.once('value').then((snap) => {
return snap.val();
});
}