在我的组件中,我正在从服务提供商处调用一个函数。
从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
内部使用控制台日志时,一切正常
答案 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