【发布时间】:2019-06-13 02:04:44
【问题描述】:
我有一个异步函数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"?
}
【问题讨论】:
-
您尝试“不起作用”的方式基本上是正确的方式。这种方式到底有什么不妥?
-
“这是“兑现承诺”吗?”是的
-
@JosephSible wasFound 总是假的
-
那是因为没有考虑
forEach回调的返回值 -
@Phil ooooh 所以我为 forEach 回调返回 true 而不是为 songAlreadyInQueue 返回 true?
标签: javascript asynchronous async-await