首页 > 解决方案 > 异步函数在 Angular 中返回 ZoneAwarePromise

问题描述

我有currentUserName()应该返回name但返回包含 __zone_symbol__value 和正确数据的 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; }));

标签: javascriptangularfirebase

解决方案


为什么不使用承诺?

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;

}

并这样称呼它

this.currentUserName().then(function(name) { console.log(name) }));

推荐阅读