2017-04-04 5 views
0

は、以下の(簡体字)のコードを検討:「子削除済み」イベントが発生しないようにするにはどうすればよいでしょうか?

var queueTask = function (taskObject) { 
    var deferred = $q.defer(); 

    // Create new task reference & push new Task object to reference location 
    var newTaskRef = firebase.database().ref("task").push(taskObject); 

    newTaskRef.once('child_removed', function (snapshot) { 
     // SUCCESS 
     console.log("@DEBUG - TASK COMPLETE/CHILD REMOVED"); 
     deferred.resolve(snapshot); 
    }); 

    return deferred.promise; 
}; 

(サーバ側の作業者は、タスクを処理し、データベース上の別の場所に結果を書き込み、そのオブジェクトを削除する。)

タスクオブジェクトが削除されますが、child-removedイベントは発生しません。

child-removedイベントが発生するのを防ぐにはどうすればよいですか?

+0

私の最初の仮定は、タスクがあまりにも速く実行されているということです。 – Lindauson

+0

私は要素として処理時間を削除しました:タスクワーカーの処理コードに人為的な遅延を追加しましたが、結果は同じです: 'on-removed'イベントは決して発生しません。 – Lindauson

+0

また、非ルートの場所( '.../queue/task /')にタスクを追加しましたが、それでも問題は解決しませんでした。 – Lindauson

答えて

0

は、セキュリティの規則を確認してください:

あなたのセキュリティの規則は、次のデフォルト値のままにしている場合は、イベントクエリは動作しません。

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    } 
} 

をまた、あなたのセキュリティの規則は、読み取り許可していない場合データが書き込まれた場所へのアクセス(つまり、ユーザーは書き込みアクセス権を持ちますが、読み取りアクセス権はありません)。イベント照会は失敗します。

イベントクエリは、変更されたデータのスナップショット(child_removedイベントの場合は削除されたデータ)を返すので、読み取りアクセスが必要です。

関連する問題