我正在使用将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 ""
答案 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;
});
}