prevent re-resolving

This commit is contained in:
Leo Horie 2014-05-12 13:21:46 -04:00
parent 92f85fa9ea
commit 7f35cf31f2
2 changed files with 58 additions and 2 deletions

View file

@ -347,12 +347,14 @@ Mithril = m = new function app(window) {
var resolvers = [], rejecters = [], resolved, rejected
var object = {
resolve: function(value) {
resolved = value
if (resolved === undefined) resolved = value
for (var i = 0; i < resolvers.length; i++) resolvers[i](value)
resolvers.length = rejecters.length = 0
},
reject: function(value) {
rejected = value
if (rejected === undefined) rejected = value
for (var i = 0; i < rejecters.length; i++) rejecters[i](value)
resolvers.length = rejecters.length = 0
},
promise: m.prop()
}

View file

@ -688,6 +688,60 @@ function testMithril(mock) {
})
return value === 1
})
test(function() {
//https://github.com/lhorie/mithril.js/issues/80
var deferred = m.deferred(), value
deferred.resolve(1)
deferred.resolve(2)
deferred.promise.then(function(data) {
value = data
})
return value === 1
})
test(function() {
//https://github.com/lhorie/mithril.js/issues/80
var deferred = m.deferred(), value
deferred.promise.then(function(data) {
value = data
})
deferred.resolve(1)
deferred.resolve(2)
return value === 1
})
test(function() {
//https://github.com/lhorie/mithril.js/issues/80
var deferred = m.deferred(), value1, value2
deferred.promise.then(function(data) {
value1 = data
}, function(data) {
value2 = data
})
deferred.resolve(1)
deferred.reject(2)
return value1 === 1 && value2 === undefined
})
test(function() {
//https://github.com/lhorie/mithril.js/issues/80
var deferred = m.deferred(), value1, value2
deferred.promise.then(function() {
value1 = data
}, function(data) {
value2 = data
})
deferred.reject(1)
deferred.resolve(2)
return value1 === undefined && value2 === 1
})
test(function() {
//https://github.com/lhorie/mithril.js/issues/80
var deferred = m.deferred(), value
deferred.promise.then(null, function(data) {
value = data
})
deferred.reject(1)
deferred.reject(2)
return value === 1
})
//m.sync
test(function() {