var ref = new Firebase('https://***.firebaseio.com'); var addNode = function(text) { // kriskowal/q var deferred = Q.defer(); var task = ref.child('addnode').push({ new: text }, function(e) { if (e) { deferred.reject(e); } else { /* . progress() _progress, resolve() - . */ ref.child('addnode/'+task.key()).on('value', function(d) { var v = d.val(); if(v == null) { deferred.resolve(); } else { deferred.notify(v._progress); } }) }}); return deferred.promise; } var rmNode = function(k) { var deferred = Q.defer(); var task = ref.child('rmnode').push({ key: k }, function(e) { if (e) { deferred.reject(e); } else { ref.child('addnode/'+task.key()).on('value', function(d) { var v = d.val(); if(v == null) { deferred.resolve(); } else { deferred.notify(v._progress); } }) }}); return deferred.promise; }
var ref = new Firebase('https://***.firebaseio.com'); var length; ref.child('length').once('value', function(d) { length = d.val(); }); var addNodeQueue = new Queue(ref.child('addnode'), {}, function(data, progress, resolve, reject) { ref.child('elements').push(data.new, function(e) { if (e) { reject(e); } else { progress(50); length++; ref.child('length').set(length, function(e) { if (e) { reject(e.message); } else { resolve(); }}); }}); }); var rmNodeQueue = new Queue(ref.child('rmnode'), {}, function(data, progress, resolve, reject) { ref.child('elements/'+data.key).remove(function(e) { if (e) { reject(e); } else { progress(50); length--; ref.child('length').set(length, function(e) { if (e) { reject(e); } else { resolve(); }}); }}); });
{ "rules": { "addnode": { "$taskId": { "new": { ".validate": "newData.isString()" } } }, "rmnode": { "$taskId": { "key": { ".validate": "root.child('elements/'+newData.val()).exists()" // } } } } }
Source: https://habr.com/ru/post/266355/
All Articles