2016-08-02 14 views
0

私は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リスナーを追加するときに競合状態はありますか?

答えて

0

コールバックは必要ありません。コードはかなりシンプルでなければなりません。

Retrieve Data on the Web

直接の子が削除 ときchild_removedイベントがトリガされます。これは通常、child_addedイベントと child_changedイベントと一緒に使用されます。イベントイベントに渡されたスナップショットには、削除された子のデータが に含まれています。

イベントは、子ノードが に変更されるたびにトリガーされます。これには、子ノード ノードの子孫への変更が含まれます。これは通常、アイテムリストの変更に対応するためにchild_addedおよび のchild_removedイベントとともに使用されます。イベントリスナーに渡された スナップショットには、更新された のデータが含まれています。

var commentsRef = firebase.database().ref('post-comments/' + postId); 
commentsRef.on('child_added', function(data) { 
    addCommentElement(postElement, data.key, data.val().text, data.val().author); 
}); 

commentsRef.on('child_changed', function(data) { 
    setCommentValues(postElement, data.key, data.val().text, data.val().author); 
}); 

commentsRef.on('child_removed', function(data) { 
    deleteComment(postElement, data.key); 
}); 
関連する問題