删除对象和存储 Angular Firebase
Posted
技术标签:
【中文标题】删除对象和存储 Angular Firebase【英文标题】:Remove Object and Storage Angular Firebase 【发布时间】:2019-05-05 04:49:17 【问题描述】:我正在做我的第一个 Angular 和 Firebase 项目,我快完成了。
我有一个关于使用两者删除对象的问题。我有一个将删除对象的服务。该对象内部有另一个名为“图片”的对象,它有两个属性,key: string
和 url: string
。
我想确保在删除该对象时也从存储中删除该文件,我发现这种方法可行,但我认为这不是正确的方法,特别是因为我收到 TS 错误:
“错误 TS2339:类型‘’上不存在属性‘图片’。”
谁能帮我解决这个问题?这是我的删除方法:
deleteEvent(id: string)
const obj = this.db.object(this.NODE + id);
const getPic = obj.snapshotChanges().subscribe(
(a) =>
console.log(a.payload.val());
this.storage.ref(this.NODE + a.payload.val().picture.key).delete();
);
return obj.remove();
【问题讨论】:
【参考方案1】:我想说你已经掌握了它的要点。如果唯一困扰您的是 Linting 错误,您可以使用括号表示法而不是点表示法:this.NODE + a.payload.val()['picture']['key']
... 我可能会在其中引入一些错误处理以防万一。
一方面,为了一点点改进,我建议不要使用订阅来一次性从数据库中获取数据。 AngularFire2 有一种方法可以减少设置可观察/订阅的开销,但无论如何它都将被删除。如果我这样做,我会这样写:
deleteEvent(id: string)
return this.db.database.ref(this.NODE + id).once('value').then( data =>
console.log(data.val());
return this.storage.ref(this.NODE + a.payload.val()['picture']['key']).delete().then( () =>
console.log('Success!');
return this.db.database.ref(this.NODE + id).remove();
).catch( err =>
console.log(`Error deleting $this.NODE + a.payload.val()['picture']['key'] from storage:`);
console.log(err);
);
).catch( err =>
console.log(`Error obtaining /$this.NODE + id from the database:`);
console.log(err);
);
*未经测试的代码
我是 Promise 的忠实拥护者(好像你说不出来),AngularFire2 经常使用它们 - 使处理错误变得更加容易。
【讨论】:
嘿@JeremyW 兄弟,非常感谢!我不知道括号符号。我真的很喜欢你的方法,我也成为了 promises 的粉丝,这是有道理的,对吧?我只需要更好地掌握它。非常感谢您的帮助兄弟!以上是关于删除对象和存储 Angular Firebase的主要内容,如果未能解决你的问题,请参考以下文章