reactjs NextAuth中的异步函数在返回值之前完成

uqjltbpv  于 2023-02-18  发布在  React
关注(0)|答案(1)|浏览(132)

登录时,我尝试查询FirestoreDB,然后返回用户数据或null。
我尝试用async await来做这件事,但是相关代码在数据库查询完成之前就运行了。当"CORRECT"(正确的凭证)在空的用户详细信息(不完整)之后被控制台记录时,就可以看到这一点。
谢谢你,
这是我的代码:

let data = await db.collection('users').where("email", "==", email).get().then(querySnapshot => {
                console.log("SOMETHING")
                let arr = []
                querySnapshot.docs.map(doc => arr.push(doc.data()))
                console.log(arr)
                // console.log(sc.decrypt(arr[0].password))
                
                if (arr[0].email == email) {
                    bcrypt.compare(password, arr[0].password, (err, match) => {
                        

                       if (match) {
                            console.log("CORRECT")

                            return arr[0]
                       } else {
                           if (err) {
                            console.log(err)
                           
                        }
                            console.log("INCORRECT")

                            return null
                        }
                    })
                }
            })
            
                
            console.log("DATA " +  data)
                return data ? data : null
wooyq4lh

wooyq4lh1#

一个小时的搜索,但2分钟后,我张贴我弄清楚了。
以下是适用于同一条船上的任何人的工作代码:

let data = new Promise((resolve, reject) => {
                db.collection('users').where("email", "==", email).get().then(querySnapshot => {
                    console.log("SOMETHING")
                    let arr = []
                    querySnapshot.docs.map(doc => arr.push(doc.data()))
                    console.log(arr)
                    // console.log(sc.decrypt(arr[0].password))
                    
                    if (arr[0].email == email) {
                        bcrypt.compare(password, arr[0].password, (err, match) => {
                            
    
                           if (match) {
                                console.log("CORRECT")
    
                                resolve(arr[0])
                           } else {
                               if (err) {
                                console.log(err)
                               
                            }
                                console.log("INCORRECT")
    
                                resolve(null)
                            }
                        })
                    }
                })
            })

            
            
                
            
            Promise.all([data]).then(async () => {
                
                console.log(await data)
            })
            
            return data ? data : null

相关问题