UNPKG

light-node-zookeeper

Version:

small node zookeeper

62 lines (51 loc) 1.62 kB
var assert = require ('assert'); var promise = require("./promise"); var ZooKeeper = require ("./zookeeper"); var util = require('util'); exports = module.exports = ZooKeeperPromise; exports.ZK = ZooKeeperPromise; // backwards compatibility function ZooKeeperPromise() { var self = this; ZooKeeper.apply(this, arguments); return self; } util.inherits(ZooKeeperPromise, ZooKeeper); ZooKeeperPromise.prototype.on_connected = function on_connected() { var self = this; var deferred = promise.defer(); self.once ('connect', function () { deferred.resolve (self); }); return deferred.promise; }; function convertAsync(fn){ return function() { var self = this; var deferred = promise.defer(); arguments.length ++; arguments[arguments.length-1] = function(rc, error, result){ if(rc) { deferred.emitError(rc); } else { if(arguments.length > 3){ // if there are multiple success values, we return an array Array.prototype.shift.call(arguments, 1); Array.prototype.shift.call(arguments, 1); deferred.emitSuccess(arguments); } else { deferred.emitSuccess(result); } } }; fn.apply (self, arguments); return deferred.promise; }; }; for (var f in ZooKeeperPromise.prototype) { var m = f.match(/^a(w?)_(.*)$/); if (m) { var new_func = m[1]? m[1] + "_" + m[2] : m[2]; ZooKeeperPromise.prototype[new_func] = convertAsync (ZooKeeperPromise.prototype[f]); //console.log ("function %s is %j", f, util.inspect(ZK.prototype[new_func],true,3)); } }