簡體   English   中英

等待異步函數返回true或false - 如何檢查返回值?

[英]Waiting for async function to return true or false - how do I check return value?

我有一個異步函數songAlreadyInQueue ,如果在數據庫中找到ID,則返回true,否則返回false。 我想使用這樣的函數:

if(!songAlreadyInQueue(ref, id)){
  // do stuff
}

但我知道,因為它是一個異步函數,所以我必須等待結果回來才能真正知道它是真還是假。 我上面的內容總是假的所以我試過這個:

songAlreadyInQueue(ref, id).then((wasFound) => {
                                console.log("wasfound = " + wasFound)
                                if(!wasFound){
                                    //do stuff
                                }
                            })

但這也不起作用。 等待此異步函數完成的正確方法是什么? 這是我的異步函數看起來像(簡化):

async function songAlreadyInQueue(requestQueueRef, requestID) {
    var querye = requestQueueRef.where("id", "==", requestID)
        .get()
        .then((snap) => {
            snap.docs.forEach(doc => {
                if (doc.exists) {
                    console.log("**************FOUND REQUEST IN QUEUE ALREADY!")
                    return true
                }
            })
            return false
        })
    return querye // not sure if correct. Is this "returning a promise"?
}

使用異步函數,您應該使用await而不是then()這樣您就不會創建另一個匿名函數。 您將從匿名函數而不是異步函數返回。 嘗試這個。

 async function songAlreadyInQueue(requestQueueRef, requestID) { var snap = await requestQueueRef.where("id", "==", requestID).get() var found = false; snap.docs.forEach(doc => { if (doc.exists) { console.log("**************FOUND REQUEST IN QUEUE ALREADY!") found = true } }) return found } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM