handle resolved/rejected promise
This commit is contained in:
parent
b23ffd1aee
commit
92f85fa9ea
2 changed files with 30 additions and 6 deletions
18
mithril.js
18
mithril.js
|
|
@ -344,12 +344,14 @@ Mithril = m = new function app(window) {
|
|||
}
|
||||
|
||||
m.deferred = function() {
|
||||
var resolvers = [], rejecters = []
|
||||
var resolvers = [], rejecters = [], resolved, rejected
|
||||
var object = {
|
||||
resolve: function(value) {
|
||||
resolved = value
|
||||
for (var i = 0; i < resolvers.length; i++) resolvers[i](value)
|
||||
},
|
||||
reject: function(value) {
|
||||
rejected = value
|
||||
for (var i = 0; i < rejecters.length; i++) rejecters[i](value)
|
||||
},
|
||||
promise: m.prop()
|
||||
|
|
@ -359,8 +361,8 @@ Mithril = m = new function app(window) {
|
|||
var next = m.deferred()
|
||||
if (!success) success = identity
|
||||
if (!error) error = identity
|
||||
function push(list, method, callback) {
|
||||
list.push(function(value) {
|
||||
function callback(method, callback) {
|
||||
return function(value) {
|
||||
try {
|
||||
var result = callback(value)
|
||||
if (result && typeof result.then == "function") result.then(next[method], error)
|
||||
|
|
@ -370,10 +372,14 @@ Mithril = m = new function app(window) {
|
|||
if (e instanceof Error && e.constructor !== Error) throw e
|
||||
else next.reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
if (resolved !== undefined) callback("resolve", success)(resolved)
|
||||
else if (rejected !== undefined) callback("reject", error)(rejected)
|
||||
else {
|
||||
resolvers.push(callback("resolve", success))
|
||||
rejecters.push(callback("reject", error))
|
||||
}
|
||||
push(resolvers, "resolve", success)
|
||||
push(rejecters, "reject", error)
|
||||
return next.promise
|
||||
}
|
||||
return object
|
||||
|
|
|
|||
|
|
@ -670,6 +670,24 @@ function testMithril(mock) {
|
|||
deferred2.resolve(2)
|
||||
return value1 === 1 && value2 === 2
|
||||
})
|
||||
test(function() {
|
||||
//https://github.com/lhorie/mithril.js/issues/80
|
||||
var deferred = m.deferred(), value
|
||||
deferred.resolve(1)
|
||||
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.reject(1)
|
||||
deferred.promise.then(null, function(data) {
|
||||
value = data
|
||||
})
|
||||
return value === 1
|
||||
})
|
||||
|
||||
//m.sync
|
||||
test(function() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue