2017-10-23 16 views
0

をfirebaseするためにプッシュするとき、私はfirebase無限ループ

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})); 
    }); 
    } 

から値のJSONを返し、私は、以前の方法から取得するリストに新しい値を追加するには、このメソッドを使用しています。このメソッドを持っていますいくつかの条件が満たされます。

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}); 

私はそれが私がのリストを変更するという事実とは何かを持っていると思います問題、および角度を変更として認識し、モデルを更新しようとします。

私は最近、snapshotChanges()を使用してfirebaseのペイロードを取得する最新のバージョンのangularfireに移行しました。以前のバージョンではこの問題は発生しませんでした。

問題が発生する可能性のあるアイデアは何ですか?

答えて

0

私はわからないありがとう、私はFirebaseで働いていたので、前に長い時間。しかし、何かが明らかにループを作り出しています。リスナーがどこかで変更を探している場合は、DBに何かをプッシュしているときにもこれがトリガーされます。私はサーバー側でコード化したとき、これについて忘れてしまったことを覚えています。

+0

どのように変更を探しているのかわかりません。 –

+0

このポストが見つかりましたhttps://github.com/angular/angularfire2/issues/651とrxjs 'take'演算子を使用して私の問題を解決するようです –

+0

ああ、はい!知っていると非常に便利です。 – ravo10