Angular 2-服务中一个Firestore文档的返回字段

时间:2019-03-27 14:41:52

标签: angular firebase google-cloud-firestore

我正在使用将Firebase作为后端的Nativescript Angular 2应用程序。我只想通过用户的uid获得用户的名字。当我在服务之外使用console.log()函数时,它将返回一个空字符串(“”)。我认为这与.then()承诺有关。我该如何解决?

user.service.ts

getFirstNameByUid(uid: string): string {
    const userDocument = firebaseWebApi.firestore().collection("users").doc(uid);

    userDocument.get().then((doc) => {
        if (doc.exists) {
            return doc.data().firstname;
        } else {
            console.log("No such document!");
        }
    });

    return "";
}

app.component.ts

console.log(this.userService.GetFirstNameByUid("31faklj3193"); // Returns ""

2 个答案:

答案 0 :(得分:0)

您正在返回空字符串,然后Firebase请求才有机会从文档中返回结果。

如果需要等待,请使用带有async / await的promise返回值。

应该是这样的:

async getFirstNameByUid(uid: string): string {
    const userDocument = firebaseWebApi.firestore().collection("users").doc(uid);

    const doc = await userDocument.get();

    if (doc.exists) {
        return doc.data().firstname;
    } else {
        console.log("No such document!");
    }

    return "";
}

答案 1 :(得分:0)

我将删除输出类型。

getFirstNameByUid(uid: string) {
    const userDocument = firebaseWebApi.firestore().collection("users").doc(uid);
    return userDocument.get().then((doc) => {
         const result = doc.exists ? doc.data().firstname : null;
         console.log(result);
         return result;
    });
}