diff --git a/packages/livedata/livedata_connection.js b/packages/livedata/livedata_connection.js index 7f0632593f..51f69ddcdd 100644 --- a/packages/livedata/livedata_connection.js +++ b/packages/livedata/livedata_connection.js @@ -534,18 +534,30 @@ _.extend(Meteor._LivedataConnection.prototype, { return handle; }, - _subscribeAndWait: function (/* arguments */) { + // options: + // - onLateError {Function(error)} called if an error was received after the ready event. + // (errors received before ready cause an error to be thrown) + _subscribeAndWait: function (name, args, options) { var self = this; var f = new Future(); - var args = _.toArray(arguments); + var ready = false; + args = args || []; args.push({ - onReady: function () { f.return(); }, - onError: function (e) { f.throw(e); } + onReady: function () { + ready = true; + f.return(); + }, + onError: function (e) { + if (!ready) + f.throw(e); + else + options && options.onLateError && options.onLateError(e); + } }); - self.subscribe.apply(self, args); + self.subscribe.apply(self, [name].concat(args)); return f.wait(); -}, + }, methods: function (methods) { var self = this; diff --git a/tools/deploy-galaxy.js b/tools/deploy-galaxy.js index ac5c7ed003..fa70d9c064 100644 --- a/tools/deploy-galaxy.js +++ b/tools/deploy-galaxy.js @@ -58,10 +58,14 @@ var prettyCall = function (galaxy, name, args, messages) { var prettySub = function (galaxy, name, args, messages) { - try { - var ret = galaxy._subscribeAndWait.apply(galaxy, [name].concat(args)); - } catch (e) { + var onError = function (e) { exitWithError(e, messages); + }; + + try { + var ret = galaxy._subscribeAndWait(name, args, {onLateError: onError}); + } catch (e) { + onError(e); } return ret; }; @@ -207,8 +211,6 @@ exports.logs = function (options) { if (!ok) throw new Error("Couldn't connect to logs mongodb."); - // XXX make this talk to a separate logReader service instead of - // ultraworld direcly prettySub(logReader, "logsForApp", [options.app], { "no-such-app": "No such app: " + options.app });