【发布时间】:2017-06-03 12:38:58
【问题描述】:
我想运行一个组合操作以在一次操作中删除 Firebase 上的 2 个节点。如果我有节点位置,我知道有 remove() 来删除节点。但是什么是 remove() 操作返回?一个承诺还是一个可观察的?我如何知道删除操作是否成功,以便我可以运行另一个删除操作或告诉我的组件删除操作成功(或有错误)?
提供示例(需要 AngularFire 的多位置删除帮助):
constructor(private db:AngularFireDatabase, @Inject(FirebaseRef) fb) {
this.sdkDb = fb.database().ref();
}
deleteTask(taskId: string, jobtypeId: string): boolen {
const taskObservable = this.db.object('tasks' + '/' + taskId);
const taskPerJobtypeObervable = this.db.object('tasksPreJobtype' + '/' + jobtypeId + '/' + taskId);
taskObservable.remove()
.then(_ => {
console.log('success');
taskPerJobtypeObervable.remove()
.then(_ => {
return ture
});
})
.catch(err => {console.log(err, 'You dont have access!'), return false});
}
如您所见,我需要将 remove 链接为一个承诺,我真的想避免这种情况。我希望这是可观察的模式,因为我使用 angularFire2。所以我不想返回一个布尔值,而是返回一个可观察的。我希望这是多位置删除。如何重构此代码?太感谢了!
【问题讨论】:
-
它似乎返回了一个承诺:github.com/angular/angularfire2/blob/…。您还可以使用单个多位置
update()呼叫在一次呼叫中将它们全部删除。 firebase.googleblog.com/2015/09/… -
感谢弗兰克的快速共同!是的,它返回一个带有 angularFire remove() 的承诺。但是由于这是一个多位置“删除”,如果我链接这个承诺,它看起来很丑陋。我想使用您提到的“多位置更新()”方法。但该链接只有更新示例。我如何删除(我不能使用更新来删除节点对吗?!)我提供了一个例子来说明这一点。
-
当你发布null时它会被删除。啊,但我看到你已经发现了。 :-)
标签: angular firebase promise firebase-realtime-database angularfire2