等待异步函数返回true或false-如何检查返回值?

艾萨克·佩雷斯

我有一个异步函数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
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章