Как я могу использовать функции asyn c / await? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть функция следующим образом:

function getMessages(){
     this.removeListener = myFirestore
          .collection('messages')
          .doc(this.groupChatId)
          .collection(this.groupChatId)
          .onSnapshot(
            snapshot => {
              snapshot.docChanges().forEach(change => {
                if (change.type === 'added') {
                  this.listMessage.push(change.doc.data())
                }
              })
            },
            err => {
              console.log(err)
            }
          )
          return this.renderMessages()   # my function
        }

В вышеприведенной функции мне нужно использовать массив this.listMessage в функции this.renderMessages(). Для этого функция getMessages() должна сначала выполнить мой запрос firestore, а затем this.renderMessages() должна вызываться функция. Но без выполнения запроса firestore this.renderMessages() вызывается. Я знаю, что это проблема с асинхронными c / await функциями, но я не знаю много об этих функциях.

Теперь, как я могу вызвать функцию this.renderMessages() после запроса пожарного магазина, используя функции asyn c / await?

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете попробовать этот тип подхода для использования async / await.

async function getMessage() {
 try {
 this.removeListener = await myFirestore
  .collection("messages")
  .doc(this.groupChatId)
  .collection(this.groupChatId)
  .onSnapshot(snapshot => {
    snapshot.docChanges().forEach(change => {
      if (change.type === "added") {
        this.listMessage.push(change.doc.data());
      }
    });
   });
} catch (error) {
console.log(error);
}
return this.renderMessages();
}

Приведенный выше код ожидает myFirestore, а затем возвращает сообщение render. Ключевое слово await заставляет JavaScript ждать, пока это обещание не выполнится и не вернет свой результат. Надеюсь это поможет. Если вы хотите поймать ошибку, вы можете использовать try..catch block

...