角度为2的承诺与firebase

时间:2016-04-05 19:43:17

标签: firebase promise angular angular2-services

有人可以解释如何在Angular2和Firebase中正确实现承诺。

我读过一些文章,例如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(...)未定义

我也试过这个,因为最上面的文章建议

getPlayers() {
    var data;
    this.playersRef.once('value').then( function (snap){
        data = snap.val();
    });
    return data;
}

但后来我明白了:错误:Query.once失败:用1参数调用。在[null]中预计至少为2.

我不确定文章是如何使用.once('value')。然后()

1 个答案:

答案 0 :(得分:4)

出现问题是因为您尝试使用.then而不是使用承诺的方法。基本上错过了从promise方法返回getPlayers,你应该从那里返回promise以使用.then方法执行promise链接。

也不要使用回调来从中返回值(因为回调无法从中返回任何内容),在.then上使用.once函数,这样就可以扩展promise chain& ;将能够正确地返回数据。

<强>代码

getPlayers() {
    //returned promise here
    return this.playersRef.once('value').then((snap) => {
        return snap.val();
    });
}