[英]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.