затем обещание Angular 7 - «then» не существует для типа «void» - PullRequest
0 голосов
/ 31 мая 2019

Я использую следующую функцию для обновления массива в Firestore:

component.ts

crearFavorito(key, e) {
    this.fs.addFavorito(key);
    this.snackBar.open(this.message, this.action, {
      duration: 3000,
    });
  }

service.ts

addFavorito(key) {
    const user = firebase.auth().currentUser;
    this.afs.doc('eventos/' + key).update({
      favoritos: firebase.firestore.FieldValue.arrayUnion(user.uid)
    });
  }

Это хорошо работает, когда пользователь проходит проверку подлинности, но когда пользователь не вошел в систему, я получаю следующую ошибку в консоли:

ОШИБКА TypeError: Невозможно прочитать свойство 'uid' с нулевым значением

Учитывая то, что я хочу сделать, это перенаправить его в раздел входа в систему или показать сообщение, которое должно быть аутентифицировано, тогда я попытался сделать следующее:

component.ts

crearFavorito(key, e) {
    this.fs.addFavorito(key)
    .then(() => {
      this.snackBar.open(this.message, this.action, {
        duration: 3000,
      });
    }, error => console.error('error:', error));
  }

Но я получаю следующую ошибку в then Машинопись:

«then» не существует для типа «void»

Есть идеи, как этого добиться?

1 Ответ

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

просто добавьте return перед вызовом обновления. Вот обновленный код

addFavorito(key) {
  const user = firebase.auth().currentUser;
  return this.afs.doc('eventos/' + key).update({
    favoritos: firebase.firestore.FieldValue.arrayUnion(user.uid)
  });
}

Чтобы функция crearFavorito могла обрабатывать обещание, addFavorito сначала должен вернуть обещание. К счастью, функция обновления документов Firebase уже возвращает обещание. Итак, все, что вам нужно сделать, это вернуть его снова.

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