angular - 如何在 Angular2 中使用 AngularFire2 或 Firebase 进行多位置 "remove"

标签 angular firebase promise firebase-realtime-database angularfire2

我想运行一项组合操作,在一次操作中删除 Firebase 上的 2 个节点。我知道如果我有节点位置,可以使用remove()来删除节点。但是remove()操作的返回值是什么呢?是 promise 还是可观察到的?我如何知道删除操作已成功,以便我可以运行其他删除操作或告诉我的组件删除操作已成功(或有错误)?

提供示例(需要有关 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});

}

如您所见,我需要将删除链接为 promise ,我真的想避免这种情况。我希望这是可观察的模式,这也是我使用 angularFire2 的原因。因此,我不想返回 bool 值,而是想返回一个可观察的值。我希望这是多位置删除。我该如何重构这段代码?太感谢了!

最佳答案

感谢 Frank,我想我找到了解决方案并在这里分享解决方案:

这个想法是使用 update() 将两个位置设置为“null”,并且它将在 Firebase 中删除它。

这是重构代码:

deleteTask(taskId: string, jobtypeId: string): Observable<any> {

   let dataToDelete = {};
   dataToDelete['tasks/' + taskId] = null;
   dataToDelete['tasksPreJobtype/' + jobtypeId + '/' + taskId] = null;

   return this.firebaseUpdate(dataToDelete);
}

firebaseUpdate(dataToSave) {

   const subject = new Subject();

   this.sdkDb.update(dataToSave)
     .then(
       val => {
       subject.next(val);
       subject.complete();
     },
     err => {
      subject.error(err);
      subject.complete();
     }
   );

   return subject.asObservable();
}

这样,我的组件就可以轻松订阅deleteTask,并仅在deleteTask返回true时执行重定向或其他选项。响应式(Reactive)编程的力量 VS Promise :)

关于angular - 如何在 Angular2 中使用 AngularFire2 或 Firebase 进行多位置 "remove",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41731202/

相关文章:

angular - router.navigate 不工作(Angular6,延迟加载)

angular - 类型 'zip' 上不存在属性 'typeof Observable'。 Angular 6

Angular 2路由延迟加载 - 路由中的参数

javascript - Angular 2/4 :How to use the existing component instance in a popup?

javascript - 点击时如何选择正确的Id?

firebase - 使用 Firebase 获取 N 个文档的集合成本

javascript - 警告 : Can't perform a React state update on an unmounted component. 使用Effect清理函数

firebase - Firestore 订阅可能尚不存在的子集合

javascript - Node.js 如何同步返回 REST Web 服务响应?

java - 在 Play 中构建复杂的 Promise