为什么我仍然在这里得到一个未定义的return?
Why i still getting an undefined return here?
我正在尝试从我的 Firestore DB 异步函数中获取值 cvUpload。但是无论我等待多久,如果我在我的组件上调用它,它仍然是未定义的。
我看到很多人对 async await 和 promises 有同样的问题。但我真的无法解决它。我真的需要一些提示。
DatabaseService.ts
export class DatabaseService {
constructor(
private dbService : DatabaseService ) {}
async cvUpload (id : string) {
const userRef = collection(this.db, this.user_db)
const q = query(userRef, where("id", "==", id));
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
console.log(doc.data().cv) /// False (Thats correct)
return doc.data().cv;
});
}
DashboardComponent.ts
constructor(
private dbService : DatabaseService ) {
}
async ngOnInit() {
await this.checkCV('uyDer0BxoVekGU2XnYa3Xm77nm03')
}
async checkCV(id : any) {
let result = await this.dbService.cvUpload(id) /// This shoud return FALSE
}
我很感激任何帮助或提示,这将使我在这里更进一步
首先在这里:
querySnapshot.forEach((doc) => {
console.log(doc.data().cv) /// False (Thats correct)
return doc.data().cv;
...
你正在做一个 forEach...我猜你正在等待接收只有 1 个项目......但如果没有,请小心,因为你只会对待第一个元素...
无论如何,假设你只有一个元素:
可能您遇到了“虚假”返回值的问题...您能否尝试用一个对象来处理所有这些,以检查它是否仍然发生?
像这样:
DatabaseService.ts
querySnapshot.forEach((doc) => {
console.log(doc.data().cv) /// False (Thats correct)
const result: {result: boolean};
result = { result: doc?.data()?.cv ?? false, };
return result;
});
DashboardComponent.ts
async checkCV(id : any) {
const {result} = await this.dbService.cvUpload(id) /// This shoud return FALSE
}
真正的错误在于cvUpload方法。实际上,您 return 没有从 cvUpload 函数中获取任何内容。在 Array.forEach() 中返回某些内容不算作 cvUpload 的 return 值。
也许你应该 return
async cvUpload(id: string) {
const userRef = collection(this.db, this.user_db)
const q = query(userRef, where("id", "==", id));
const querySnapshot = await getDocs(q);
return querySnapshot.docs[0].data().cv;
};
我正在尝试从我的 Firestore DB 异步函数中获取值 cvUpload。但是无论我等待多久,如果我在我的组件上调用它,它仍然是未定义的。
我看到很多人对 async await 和 promises 有同样的问题。但我真的无法解决它。我真的需要一些提示。
DatabaseService.ts
export class DatabaseService {
constructor(
private dbService : DatabaseService ) {}
async cvUpload (id : string) {
const userRef = collection(this.db, this.user_db)
const q = query(userRef, where("id", "==", id));
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
console.log(doc.data().cv) /// False (Thats correct)
return doc.data().cv;
});
}
DashboardComponent.ts
constructor(
private dbService : DatabaseService ) {
}
async ngOnInit() {
await this.checkCV('uyDer0BxoVekGU2XnYa3Xm77nm03')
}
async checkCV(id : any) {
let result = await this.dbService.cvUpload(id) /// This shoud return FALSE
}
我很感激任何帮助或提示,这将使我在这里更进一步
首先在这里:
querySnapshot.forEach((doc) => {
console.log(doc.data().cv) /// False (Thats correct)
return doc.data().cv;
...
你正在做一个 forEach...我猜你正在等待接收只有 1 个项目......但如果没有,请小心,因为你只会对待第一个元素...
无论如何,假设你只有一个元素:
可能您遇到了“虚假”返回值的问题...您能否尝试用一个对象来处理所有这些,以检查它是否仍然发生?
像这样:
DatabaseService.ts
querySnapshot.forEach((doc) => {
console.log(doc.data().cv) /// False (Thats correct)
const result: {result: boolean};
result = { result: doc?.data()?.cv ?? false, };
return result;
});
DashboardComponent.ts
async checkCV(id : any) {
const {result} = await this.dbService.cvUpload(id) /// This shoud return FALSE
}
真正的错误在于cvUpload方法。实际上,您 return 没有从 cvUpload 函数中获取任何内容。在 Array.forEach() 中返回某些内容不算作 cvUpload 的 return 值。
也许你应该 return
async cvUpload(id: string) {
const userRef = collection(this.db, this.user_db)
const q = query(userRef, where("id", "==", id));
const querySnapshot = await getDocs(q);
return querySnapshot.docs[0].data().cv;
};