我正在使用以下功能来更新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'类型上不存在
有什么想法要实现吗?
答案 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的文档更新功能已经返回了承诺。因此,您需要做的就是再次返回它。