From 5e80ffa02012ebabb088f628364ceca6ea76b26a Mon Sep 17 00:00:00 2001 From: holyzfy Date: Sun, 21 Jul 2013 11:43:53 +0800 Subject: [PATCH 1/4] add example --- example-defer.js | 18 ++++++++++++++++++ example-promise.js | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 example-defer.js create mode 100644 example-promise.js diff --git a/example-defer.js b/example-defer.js new file mode 100644 index 0000000..6febacf --- /dev/null +++ b/example-defer.js @@ -0,0 +1,18 @@ +var defer = require("node-promise").defer; + +var dfd = defer(); + +dfd.promise.then(function(result){ + console.log("on succ: ", result); +}, function(err) { + console.log("on fail: ", err); +}); + +function asyncOperation() { + setTimeout(function(){ + dfd.resolve("succ result"); + //dfd.reject(new Error("an err")); + }, 2000); +} + +asyncOperation(); \ No newline at end of file diff --git a/example-promise.js b/example-promise.js new file mode 100644 index 0000000..6f8f557 --- /dev/null +++ b/example-promise.js @@ -0,0 +1,17 @@ +var promise = require("node-promise"); + +promise.execute(function(callback){ + asyncOperation(callback); +}).then(function(result){ + console.log("on succ: ", result); +}, function(err) { + console.log("on fail: ", err); +}); + + +function asyncOperation(callback) { + setTimeout(function(){ + callback(null, "succ result"); + //callback(new Error("an err")); + }, 2000); +}; \ No newline at end of file From 5e11c965d5525662e8be82cad468ef65314f1ac0 Mon Sep 17 00:00:00 2001 From: holyzfy Date: Sun, 21 Jul 2013 11:49:55 +0800 Subject: [PATCH 2/4] fix a variable error --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 258cc9f..0a1aec6 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ A default Promise constructor can be used to create a self-resolving deferred/pr var Promise = require("promise").Promise; var promise = new Promise(); asyncOperation(function(){ - Promise.resolve("succesful result"); + promise.resolve("succesful result"); }); promise -> given to the consumer From 87b140a02eedecb0b5413eeacc96b821ebda4d48 Mon Sep 17 00:00:00 2001 From: holyzfy Date: Sun, 21 Jul 2013 17:14:35 +0800 Subject: [PATCH 3/4] prevent other code from interfering with defered object --- example-defer.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/example-defer.js b/example-defer.js index 6febacf..ff75707 100644 --- a/example-defer.js +++ b/example-defer.js @@ -1,18 +1,16 @@ var defer = require("node-promise").defer; -var dfd = defer(); - -dfd.promise.then(function(result){ - console.log("on succ: ", result); -}, function(err) { - console.log("on fail: ", err); -}); - function asyncOperation() { + var dfd = defer(); setTimeout(function(){ dfd.resolve("succ result"); //dfd.reject(new Error("an err")); }, 2000); + return dfd.promise; } -asyncOperation(); \ No newline at end of file +asyncOperation().then(function(result){ + console.log("on succ: ", result); +}, function(err) { + console.log("on fail: ", err); +});; \ No newline at end of file From 09dd6f7f152b437a26ecd64b213a22f3b81199a1 Mon Sep 17 00:00:00 2001 From: holyzfy Date: Sun, 21 Jul 2013 18:53:10 +0800 Subject: [PATCH 4/4] add deferd.state(): Determine the current state of a Deferred object --- example-defer.js | 15 +++++++++------ example-promise.js | 2 +- promise.js | 11 +++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/example-defer.js b/example-defer.js index ff75707..f7db995 100644 --- a/example-defer.js +++ b/example-defer.js @@ -1,16 +1,19 @@ -var defer = require("node-promise").defer; +var defer = require("./promise").defer; function asyncOperation() { var dfd = defer(); setTimeout(function(){ - dfd.resolve("succ result"); - //dfd.reject(new Error("an err")); - }, 2000); - return dfd.promise; + if("pending" == dfd.state()) { + dfd.resolve("succ result"); + // dfd.reject(new Error("an err")); + } + }, 5000); + return dfd.timeout(3000); + // return dfd.promise; } asyncOperation().then(function(result){ console.log("on succ: ", result); }, function(err) { console.log("on fail: ", err); -});; \ No newline at end of file +}); \ No newline at end of file diff --git a/example-promise.js b/example-promise.js index 6f8f557..a6c3925 100644 --- a/example-promise.js +++ b/example-promise.js @@ -1,4 +1,4 @@ -var promise = require("node-promise"); +var promise = require("./promise"); promise.execute(function(callback){ asyncOperation(callback); diff --git a/promise.js b/promise.js index 5bbf349..b42582d 100644 --- a/promise.js +++ b/promise.js @@ -266,6 +266,17 @@ function Deferred(canceller){ reject(error); } } + + this.state = function(){ + var ret = "pending"; + if(isError) { + ret = "rejected"; + } else if(finished) { + ret = "resolved"; + } + return ret; + } + freeze(promise); };