繁体   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