从Firebase快照值获取ZoneAwarePromise

时间:2016-11-14 21:28:43

标签: angular firebase firebase-realtime-database


在我的组件中,我正在从服务提供商处调用一个函数。 从Firebase调用get函数以及我在控制台中获得的是ZoneAwarePromise。我做错了什么?

xx.component.ts文件中:

constructor( private db: Database ) {

    console.log(db.getActiveUserData());

}

database.ts档案:

getActiveUserData(){
    return this.database.child('/users/' + this.as.id).once('value').then((snapshot) => {
        return snapshot.val();
    })
}

控制台日志:

ZoneAwarePromise __zone_symbol__state:真

__ zone_symbol__value : 宾语 名字 : 弗雷德里克 UID : “zLmRHwQRM0cehsSrGNXaH2WnSgk2”

: 宾语 的 : 对象

如何以普通对象的形式接收数据?

当我在database.ts内部使用控制台日志时,一切正常

1 个答案:

答案 0 :(得分:1)

您所看到的是预期的行为。

MemberID Claim Start Claim End Continuous_Service_Days 1001 2016-04-01 2016-06-15 76 1002 2016-04-01 2016-05-15 45 1002 2016-05-18 2016-06-30 44 1002 2016-07-10 2016-08-10 32 会返回一个承诺,这就是once返回的内容。您无法使其返回快照的值。但是,您可以获得返回的承诺以解析快照的值:

getActiveUserData

您可以这样称呼:

getActiveUserData() {

  return this.database
    .child('/users/' + this.as.id)
    .once('value')
    .then((snapshot) => snapshot.val());
}

Angular模板了解promises,因此数据可以保留为promise,并且可以使用@Component({ selector: "some-component", template: `<code>{{ activeUserData | json }}</code>` }) class SomeComponent { activeUserData: any; constructor( private db: Database ) { db.getActiveUserData().then((val) => { this.activeUserData = val; }); } } 管道:

async