firebase - Angular2 中的 Promise 与 firebase

标签 firebase promise angular angular2-services

有人可以解释一下如何在 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/

相关文章:

ios - 当应用在后台时,iOS 上不显示通知(使用 Firebase 发送)

javascript - Firebase setDoc() 不创建文档

javascript - promise 解决后如何从 Promise 对象中获取值

node.js - 使用 res.send() 进行 promise ;

javascript - Angular 2 : Add validators to ngModelGroup

firebase - 更改 Firebase 实时数据库数据位置

ios - 调用注释填充TableView : correcting code errors

node.js - NodeJS中promise如何通过多层回调解析所有数据

angular - md-autocomplete angular2 从服务器获取数据(带服务)

仅在 ngrx 存储检查后才有 Angular 2 http 请求