Angular 2 - поле возврата из одного документа пожарной службы из сервиса - PullRequest
0 голосов
/ 27 марта 2019

Я использую приложение Nativescript Angular 2 с firebase в качестве моего бэкэнда.Я хочу получить имя пользователя только по его 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 голосов
/ 27 марта 2019

Я бы удалил тип вывода.

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;
    });
}
0 голосов
/ 27 марта 2019

Вы возвращаете пустую строку до того, как ваш запрос Firebase сможет вернуть результат из документа.

Если вам нужно подождать, используйте обещание с async / await для возврата значения.

Должно быть что-то вроде:

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 "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...