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) }));