删除对象和存储 Angular Firebase

Remove Object and Storage Angular Firebase

我正在 Angular 和 Firebase 中进行我的第一个项目,我快完成了。

我对使用两者删除对象有疑问。我有一项将删除对象的服务。该对象内部有另一个名为 "picture" 的对象,它有 2 个属性,key: stringurl: 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 经常使用它们 - 使处理错误变得更加容易。