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