Как вызвать оператор ожидания в операторе ожидания Firebase? - PullRequest
0 голосов
/ 02 февраля 2019

Я создаю облачную функцию Firebase, которая опирается на некоторые данные о том, существуют ли определенные ключи в базе данных реального времени, но не возвращается должным образом.Он продолжает либо возвращать undefined, либо Promise {}.Вот функция, которую я пытаюсь вызвать:

async function checkMatchExists(baseUser: string, friend:string){
return await admin.database().ref('pairs/').child(baseUser).once("value", 
snapshot => {
  return snapshot.exists();
 });
}

Если я попытаюсь вызвать функцию в моей основной функции следующим образом:

const exists = await checkMatchExists(userId, eachUserId)

Я получаю ошибку await expression is only allowed within an async function.Это потому, что все это вложено в другой асинхронный метод Firebase:

await admin.database()
      .ref(`locations/`).orderByChild('uid').once('value', userList =>{
        let sentToUser;
        userList.forEach(function(child){
             /* where all the troubles are happening */
       });
   });

Итак, как я могу использовать оператор await при вызове внешней функции без рисования этой ошибки?Есть ли способ вложить два await звонка?Если нет, то как я могу получить данные из этой функции вовремя?

ОБНОВЛЕНИЕ: Я все еще не знаю, как правильно получить доступ к результату за пределами .then ().Я понимаю, что ожидание - это путь сюда, но опять же, я не могу использовать ожидание в другом ожидании.

Спасибо всем за помощь.Это было определенно из-за путаницы из-за разницы между обратными вызовами и методом async / await.Вот что я изменил в своей функции:

async function checkMatchExists(baseUser: string, friend:string){
try{
  const snapshot = await 
  admin.database().ref('pairs/').child(baseUser).once("value")
     console.log("Does the snapshot exist?")
     console.log(snapshot.exists())
  return snapshot.exists()
  }
  catch(e) {
    console.log(e)
    return e
   }
  }

А вот как я правильно ее называю в облачной функции Firebase:

const doesExist = checkMatchExists(eachUserId, userId)
        .catch(err => console.error(err))
        .then(result => console.log("result: " + String(result)))
        .catch(() => 'obligatory catch')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...