带有 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();
    });
}