为什么我仍然在这里得到一个未定义的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;
    };