From da6e0e212c2207a15265a139d122c4c0ebed0422 Mon Sep 17 00:00:00 2001 From: Luc Yriarte Date: Thu, 23 May 2013 16:45:14 +0200 Subject: [PATCH] implement FutureResolver.resolve --- cloudeebus/cloudeebus.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/cloudeebus/cloudeebus.js b/cloudeebus/cloudeebus.js index 5d24dac..220aae9 100644 --- a/cloudeebus/cloudeebus.js +++ b/cloudeebus/cloudeebus.js @@ -431,12 +431,24 @@ cloudeebus.FutureResolver.prototype.resolve = function(value, sync) { if (this.resolved) return; - try { - this.accept(value, sync); - } - catch (e) { - this.reject(e, sync); + var then = (value && value.then && value.then.apply) ? value.then : null; + if (then) { + var self = this; + var acceptCallback = function(arg) { + self.accept(arg, true); + }; + var rejectCallback = function(arg) { + self.reject(arg, true); + }; + try { + then.apply(value, [acceptCallback, rejectCallback]); + } + catch (e) { + this.reject(e, true); + } } + + this.accept(value, sync); }; @@ -512,7 +524,7 @@ cloudeebus.Future.prototype.then = function(acceptCB, rejectCB) { acceptWrapper = function(arg) { try { var value = acceptCB.apply(future, [arg]); - resolver.accept(value, true); + resolver.resolve(value, true); } catch (e) { resolver.reject(e, true); @@ -527,7 +539,7 @@ cloudeebus.Future.prototype.then = function(acceptCB, rejectCB) { rejectWrapper = function(arg) { try { var value = rejectCB.apply(future, [arg]); - resolver.reject(value, true); + resolver.resolve(value, true); } catch (e) { resolver.reject(e, true); -- 2.7.4