私はfirebaseで2つのテストを実行しています。 1つのバージョンは合格し、もう1つは合格しません。 child_removedコールバックは、子が実際に追加される前に添付されていれば正常に動作します。挿入後に取り付けられても発射しません。テストに失敗したchild_removedが常にファイアベースで起動するとは限りません
it("A) listens to child_removed raw (Before Insert)", function (done) {
this.timeout(5000);
let ref = DataServices.database.ref();
let pushRef = ref.child('test/testChildRemovedA').push();
let newKey = pushRef.key;
let insertPath = 'test/testChildRemovedA/' + newKey;
let callback = (snapshot) => { done(); }
DataServices.database.ref('test/testChildRemovedA/').on("child_removed", callback);
let updates = {};
updates[insertPath] = 'hi';
DataServices.database.ref().update(updates).then(() => {
updates[insertPath] = null;
DataServices.database.ref().update(updates);
});
});
バージョン:試験に合格
版
it("B) listens to child_removed raw (After Insert)", function (done) {
this.timeout(10000);
let ref = DataServices.database.ref();
let pushRef = ref.child('test/testChildRemovedB').push();
let newKey = pushRef.key;
let insertPath = 'test/testChildRemovedB/' + newKey;
let callback = (snapshot) => { done(); }
let updates = {};
updates[insertPath] = 'hi';
DataServices.database.ref().update(updates).then(() => {
DataServices.database.ref('test/testChildRemovedB/').on("child_removed", callback);
updates[insertPath] = null;
DataServices.database.ref().update(updates);
});
});
唯一の違いはchild_removedイベントが結合しているが、データは実際には前の両方が取り付けられています削除されました。どちらの場合も、データは実際にfirebaseから削除されます。
child_removedリスナーを追加するときに競合状態はありますか?