Функции не запускаются в правильном порядке с async / await - PullRequest
0 голосов
/ 27 мая 2019

В службе Angular я создал следующую функцию:

getListKey(user) {
  firebase.database().ref(`userprofile/${user.uid}/list`).once('value').then(snapshot => {
    console.log(snapshot.val())
    this.listKey = snapshot.val()
    return this.listKey
  })
}

Я хочу вызвать эту функцию в другом файле при загрузке и назначить возвращаемое значение глобальной переменной listKey в службе, которая будет использоваться для другой функции из компонента. Однако вторая функция запускается до того, как данные были получены даже с использованием async / await.

Это соответствующий кусок из моего компонента:

this.afAuth.authState.subscribe(async (user: firebase.User) => {
  await this.fire.getListKey(user);
  this.fire.getUserList(this.fire.listKey).subscribe(lists => {...})
  ...
}

Как я могу заставить getUserList() ждать listKey?

1 Ответ

0 голосов
/ 27 мая 2019

Добавьте оператор возврата в getListKey, чтобы вернуть обещание.В противном случае вы возвращаете undefined, и ожидание undefined не будет ожидать готовности моментального снимка базы данных.

getListKey(user) {
  return firebase.database().ref(`userprofile/${user.uid}/list`).once('value').then(snapshot => {
    console.log(snapshot.val())
    this.listKey = snapshot.val()
    return this.listKey
  })
}

Кроме того, вам, вероятно, понадобится левая сторона в вашем ожидании:

this.afAuth.authState.subscribe(async (user: firebase.User) => {
  const listKey = await this.fire.getListKey(user);
  this.fire.getUserList(listKey).subscribe(lists => {...})
  ...
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...