我有一个异步函数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"?
}
答案 0 :(得分:3)
对于异步函数,您应该使用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
}