Javascript 异步函数以角度返回ZoneAwarePromise
我有一个函数Javascript 异步函数以角度返回ZoneAwarePromise,javascript,angular,firebase,Javascript,Angular,Firebase,我有一个函数currentUserName(),它应该返回name,但返回包含正确数据的uu zone\u symbol\uu值的ZoneAwarePromise currentUserName() { var firebaseData = firebase.database().ref('users'); var userid = this.afAuth.auth.currentUser.uid; return firebaseData.ord
currentUserName()
,它应该返回name
,但返回包含正确数据的uu zone\u symbol\uu值的ZoneAwarePromise
currentUserName() {
var firebaseData = firebase.database().ref('users');
var userid = this.afAuth.auth.currentUser.uid;
return firebaseData.orderByKey().once('value').then(function (snapshot) {
var name;
snapshot.forEach(function (childSnapshot) {
if (childSnapshot.key === userid) {
name = childSnapshot.val().displayName;
}
});
return name;
});
}
函数调用:
this.currentUserName().then(function (snapshot) { return snapshot; }));
为什么不使用承诺呢
currentUserName(): Promise<any> {
var firebaseData = firebase.database().ref('users');
var userid = this.afAuth.auth.currentUser.uid;
return firebaseData.orderByKey().once('value').then(function (snapshot) {
var name;
snapshot.forEach(function (childSnapshot) {
if (childSnapshot.key === userid) {
name = childSnapshot.val().displayName;
}
});
return name;
}
如果firebase在您的
forEach
yes中返回数据,则尝试记录firebase的结果。如果我在解析之前记录,则会返回正确的数据。但在控制台中,它显示在zoneawarepromise之后。但据我所知,您的目标是获取当前活动用户的名称?如果是这样,为什么不订阅this.afAuth.authState.subscribe(user=>console.log(user))
问题是authState不知道名称。它知道电子邮件、密码和uid。
this.currentUserName().then(function(name) { console.log(name) }));