推到firebase时无限循环

时间:2017-10-23 20:28:51

标签: javascript angular firebase firebase-realtime-database

我有这个方法从firebase返回值的json

public getProblemList() {
    this.problemList = this.db.list('problems-list');
    return this.problemList.snapshotChanges().map(arr => {
      //noinspection TypeScriptUnresolvedVariable
      return arr.map(snap => Object.assign(snap.payload.val(), {$key: snap.key}));
    });
  }

我正在使用此方法将新值添加到我满足某些条件时从上一个方法获得的列表中。

public addNewProblem(problem: string) {
    this.getProblemList().subscribe(item => {
      const maxId = this._utilService.getMaxIdNewItems(item);
      if (!this._utilService.isNullOrUndefined(maxId)) {
        this.problemList.push({id: maxId + 1, name: problem});
      }
    });

}

但出于某种原因,当调用此行时,我会得到无限循环:

this.problemList.push({id: maxId + 1, name: problem});

我认为这与我更改问题列表这一事实有关,而angular将其视为更改并尝试更新模型。

我最近迁移到了angularfire的最新版本,该版本使用snapshotChanges()从firebase获取有效负载,而之前的版本我没有遇到此问题。

任何可能出现问题的想法??

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定,很久以前,因为我与Firebase合作过。但显然有些东西正在创造一个循环。如果你有一个寻找变化的侦听器,那么当你向DB推送内容时也会触发这个。我记得当我在服务器端进行编码时,我忘记了这一点。