diff --git a/mithril.js b/mithril.js index 9c385395..4a1ad840 100644 --- a/mithril.js +++ b/mithril.js @@ -764,12 +764,11 @@ var m = (function app(window, undefined) { deferred.promise = propify(deferred.promise); return deferred }; - function propify(promise) { - var prop = m.prop(); + function propify(promise, initialValue) { + var prop = m.prop(initialValue); promise.then(prop); prop.then = function(resolve, reject) { - promise = promise.then(resolve, reject).then(prop); - return prop; + return propify(promise.then(resolve, reject), initialValue) }; return prop } @@ -1022,7 +1021,7 @@ var m = (function app(window, undefined) { m.request = function(xhrOptions) { if (xhrOptions.background !== true) m.startComputation(); - var deferred = m.deferred(); + var deferred = new Deferred(); var isJSONP = xhrOptions.dataType && xhrOptions.dataType.toLowerCase() === "jsonp"; var serialize = xhrOptions.serialize = isJSONP ? identity : xhrOptions.serialize || JSON.stringify; var deserialize = xhrOptions.deserialize = isJSONP ? identity : xhrOptions.deserialize || JSON.parse; @@ -1051,7 +1050,7 @@ var m = (function app(window, undefined) { if (xhrOptions.background !== true) m.endComputation() }; ajax(xhrOptions); - deferred.promise(xhrOptions.initialValue); + deferred.promise = propify(deferred.promise, xhrOptions.initialValue); return deferred.promise }; diff --git a/tests/mithril-tests.js b/tests/mithril-tests.js index e3dca1e5..336bc8c6 100644 --- a/tests/mithril-tests.js +++ b/tests/mithril-tests.js @@ -2417,6 +2417,17 @@ function testMithril(mock) { mock.XMLHttpRequest.$instances.pop().onreadystatechange() return prop().url === "test?foo=1&foo=2" }) + test(function() { + var value + var prop1 = m.request({method: "GET", url: "test", initialValue: 123}) + var val1 = prop1() + var prop2 = prop1.then(function() {return 1}) + var val2 = prop2() + var prop3 = prop1.then(function(v) {value = v}) + var val3 = prop3() + mock.XMLHttpRequest.$instances.pop().onreadystatechange() + return val1 === 123 && val2 === 123 && val3 === 123 && value.method === "GET" && value.url === "test" + }) // m.request over jsonp test(function(){