删除对象和存储 Angular Firebase
Remove Object and Storage Angular Firebase
我正在 Angular 和 Firebase 中进行我的第一个项目,我快完成了。
我对使用两者删除对象有疑问。我有一项将删除对象的服务。该对象内部有另一个名为 "picture" 的对象,它有 2 个属性,key: string
和 url: string
。
我想确保在该对象被删除时也从存储中删除该文件,我发现这种方法可行,但我认为这不是正确的方法,特别是因为我得到了 TS错误:
"error TS2339: Property 'picture' does not exist on type '{}'."
有人可以帮我吗?这是我的删除方法:
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();
}
我会说你已经掌握了它的要点。如果唯一困扰您的是 Linting 错误,您可以使用括号表示法而不是点表示法:this.NODE + a.payload.val()['picture']['key']
...我可能会在其中引入一些错误处理以防出现问题。
一方面,为了进行小的改进,我建议不要使用订阅来一次性从数据库中获取数据。 AngularFire2 有一个方法可以在它即将被删除时设置一个 observable/subscription,开销较小。如果我这样做,我会这样写:
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);
});
}
*未经测试的代码
我是 promises 的忠实粉丝(就好像你无法分辨)并且 AngularFire2 经常使用它们 - 使处理错误变得更加容易。
我正在 Angular 和 Firebase 中进行我的第一个项目,我快完成了。
我对使用两者删除对象有疑问。我有一项将删除对象的服务。该对象内部有另一个名为 "picture" 的对象,它有 2 个属性,key: string
和 url: string
。
我想确保在该对象被删除时也从存储中删除该文件,我发现这种方法可行,但我认为这不是正确的方法,特别是因为我得到了 TS错误:
"error TS2339: Property 'picture' does not exist on type '{}'."
有人可以帮我吗?这是我的删除方法:
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();
}
我会说你已经掌握了它的要点。如果唯一困扰您的是 Linting 错误,您可以使用括号表示法而不是点表示法:this.NODE + a.payload.val()['picture']['key']
...我可能会在其中引入一些错误处理以防出现问题。
一方面,为了进行小的改进,我建议不要使用订阅来一次性从数据库中获取数据。 AngularFire2 有一个方法可以在它即将被删除时设置一个 observable/subscription,开销较小。如果我这样做,我会这样写:
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);
});
}
*未经测试的代码
我是 promises 的忠实粉丝(就好像你无法分辨)并且 AngularFire2 经常使用它们 - 使处理错误变得更加容易。