Ожидание, когда асинхронная функция вернет true или false - как проверить возвращаемое значение? - PullRequest
1 голос
/ 13 июня 2019

У меня есть асинхронная функция songAlreadyInQueue, которая будет возвращать 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"?
}

1 Ответ

3 голосов
/ 13 июня 2019

При использовании асинхронной функции вы должны использовать 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...