diff --git a/packages/xo-lib/index.js b/packages/xo-lib/index.js index 956e8dd9c..9ac42d614 100644 --- a/packages/xo-lib/index.js +++ b/packages/xo-lib/index.js @@ -10,6 +10,20 @@ var WebSocket = require('ws'); //==================================================================== +function makeDeferred() { + var resolve, reject; + var promise = new Bluebird(function (resolve_, reject_) { + resolve = resolve_; + reject = reject_; + }); + + return { + promise: promise, + reject: reject, + resolve: resolve, + }; +} + function notConnected() { throw new Error('not connected'); } @@ -63,15 +77,14 @@ assign(Xo.prototype, { } }, - connect: function () { + connect: Bluebird.method(function () { if (this.status === 'connected') { - return Bluebird.cast(); + return; } - - var deferred = Bluebird.defer(); - this.status = 'connecting'; + var deferred = makeDeferred(); + var opts = {}; if (startsWith(this._url, 'wss')) { // Due to imperfect TLS implementation in XO-Server. @@ -133,13 +146,13 @@ assign(Xo.prototype, { this._deferreds = {}; }.bind(this)); - socket.on('error', function (error) { + socket.addEventListener('error', function (error) { // Fails the connect promise if possible. deferred.reject(error); }); return deferred.promise; - }, + }), call: function (method, params) { return this.connect().then(function () { @@ -154,7 +167,7 @@ assign(Xo.prototype, { params: params || [], })); - var deferred = this._deferreds[id] = Bluebird.defer(); + var deferred = this._deferreds[id] = makeDeferred(); return deferred.promise; }.bind(this)); diff --git a/packages/xo-lib/package.json b/packages/xo-lib/package.json index c58d9ace6..253d52b56 100644 --- a/packages/xo-lib/package.json +++ b/packages/xo-lib/package.json @@ -25,7 +25,7 @@ "index.js" ], "dependencies": { - "bluebird": "^2.2.2", + "bluebird": "^2.9.6", "lodash.assign": "^2.4.1", "lodash.foreach": "^2.4.1", "ws": "^0.4.31"