diff --git a/Gruntfile.js b/Gruntfile.js index 2b708f2d..ffb7af48 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,6 +1,6 @@ module.exports = function(grunt) { - var version = "0.1.13" + var version = "0.1.14" var inputFolder = "./docs" var tempFolder = "./temp" diff --git a/mithril.js b/mithril.js index 708089c1..549296e5 100644 --- a/mithril.js +++ b/mithril.js @@ -343,16 +343,17 @@ Mithril = m = new function app(window) { return prop } + var none = {} m.deferred = function() { - var resolvers = [], rejecters = [], resolved, rejected + var resolvers = [], rejecters = [], resolved = none, rejected = none var object = { resolve: function(value) { - if (resolved === undefined) resolved = value + if (resolved === none) resolved = value for (var i = 0; i < resolvers.length; i++) resolvers[i](value) resolvers.length = rejecters.length = 0 }, reject: function(value) { - if (rejected === undefined) rejected = value + if (rejected === none) rejected = value for (var i = 0; i < rejecters.length; i++) rejecters[i](value) resolvers.length = rejecters.length = 0 }, @@ -376,8 +377,8 @@ Mithril = m = new function app(window) { } } } - if (resolved !== undefined) callback("resolve", success)(resolved) - else if (rejected !== undefined) callback("reject", error)(rejected) + if (resolved !== none) callback("resolve", success)(resolved) + else if (rejected !== none) callback("reject", error)(rejected) else { resolvers.push(callback("resolve", success)) rejecters.push(callback("reject", error)) @@ -496,3 +497,5 @@ Mithril = m = new function app(window) { if (typeof module != "undefined" && module !== null) module.exports = m if (typeof define == "function" && define.amd) define(function() {return m}) + +;;; \ No newline at end of file diff --git a/tests/mithril-tests.js b/tests/mithril-tests.js index 7c836372..10380b23 100644 --- a/tests/mithril-tests.js +++ b/tests/mithril-tests.js @@ -742,6 +742,24 @@ function testMithril(mock) { deferred.reject(2) return value === 1 }) + test(function() { + //https://github.com/lhorie/mithril.js/issues/85 + var deferred = m.deferred(), value + deferred.resolve() + deferred.promise.then(function(data) { + value = 1 + }) + return value === 1 + }) + test(function() { + //https://github.com/lhorie/mithril.js/issues/85 + var deferred = m.deferred(), value + deferred.reject() + deferred.promise.then(null, function(data) { + value = 1 + }) + return value === 1 + }) //m.sync test(function() {