allow resolving w/ no value

This commit is contained in:
Leo Horie 2014-05-18 19:47:46 -04:00
parent 67c5400d44
commit 46565f2e03
3 changed files with 27 additions and 6 deletions

View file

@ -1,6 +1,6 @@
module.exports = function(grunt) {
var version = "0.1.13"
var version = "0.1.14"
var inputFolder = "./docs"
var tempFolder = "./temp"

View file

@ -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})
;;;

View file

@ -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() {