然后保证Angular 7-类型'void'不存在'then'

时间:2019-05-31 13:43:27

标签: angular typescript google-cloud-firestore

我正在使用以下功能来更新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:无法读取null的属性'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 :(得分:0)

只需在更新调用之前添加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的文档更新功能已经返回了承诺。因此,您需要做的就是再次返回它。