Удалить объект и хранилище Угловая пожарная база - PullRequest
0 голосов
/ 03 декабря 2018

Я работаю над своим первым проектом в Angular и Firebase, я почти закончил.

У меня есть вопрос об удалении объектов с использованием обоих.У меня есть сервис, который удалит объект.Внутри объекта есть еще один объект с именем «picture», который имеет 2 свойства: key: string и url: string.

. Я хочу также удалить файл из хранилища, когда этот объект удаляется. Я нашел этоэто работает, но я не думаю, что это правильный способ, особенно потому, что я получаю ошибку TS:

"ошибка TS2339: свойство 'picture' не существует ввведите '{}'. "

Может кто-нибудь помочь мне с этим?Вот мой метод удаления :

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 Ответ

0 голосов
/ 04 декабря 2018

Я бы сказал, что у вас есть суть.Если единственное, что вас беспокоит, это ошибки 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);
    });
}

* непроверенный код

Я большой поклонник обещаний ( какесли вы не можете сказать ), и AngularFire2 часто их использует - значительно упрощает обработку ошибок.

...