report uncaught errors
This commit is contained in:
parent
e4a16d3bf4
commit
264741f2f5
3 changed files with 29 additions and 6 deletions
18
mithril.js
18
mithril.js
|
|
@ -55,7 +55,10 @@ function updateState(stream, value, error) {
|
||||||
if (recovered === HALT) return
|
if (recovered === HALT) return
|
||||||
updateValues(stream, recovered, undefined)
|
updateValues(stream, recovered, undefined)
|
||||||
}
|
}
|
||||||
catch (e) {updateValues(stream, undefined, e)}
|
catch (e) {
|
||||||
|
updateValues(stream, undefined, e)
|
||||||
|
reportUncaughtError(stream, e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else updateValues(stream, value, error)
|
else updateValues(stream, value, error)
|
||||||
stream._state.changed = true
|
stream._state.changed = true
|
||||||
|
|
@ -78,6 +81,7 @@ function updateDependency(stream, mustSync) {
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
updateState(stream, undefined, e)
|
updateState(stream, undefined, e)
|
||||||
|
reportUncaughtError(stream, e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -93,6 +97,13 @@ function finalize(stream) {
|
||||||
stream._state.changed = false
|
stream._state.changed = false
|
||||||
for (var id in stream._state.deps) stream._state.deps[id]._state.changed = false
|
for (var id in stream._state.deps) stream._state.deps[id]._state.changed = false
|
||||||
}
|
}
|
||||||
|
function reportUncaughtError(stream, e) {
|
||||||
|
if (Object.keys(stream._state.deps).length === 0) {
|
||||||
|
setTimeout(function() {
|
||||||
|
if (Object.keys(stream._state.deps).length === 0) console.error(e)
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
function run(fn) {
|
function run(fn) {
|
||||||
var self = createStream(), stream = this
|
var self = createStream(), stream = this
|
||||||
return initDependency(self, [stream], function() {
|
return initDependency(self, [stream], function() {
|
||||||
|
|
@ -1041,7 +1052,7 @@ var autoredraw = function(root, renderer, pubsub, callback) {
|
||||||
var run = throttle(callback)
|
var run = throttle(callback)
|
||||||
if (renderer != null) {
|
if (renderer != null) {
|
||||||
renderer.setEventCallback(function(e) {
|
renderer.setEventCallback(function(e) {
|
||||||
if (e.redraw !== false) run()
|
if (e.redraw !== false) pubsub.publish()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (pubsub != null) {
|
if (pubsub != null) {
|
||||||
|
|
@ -1068,7 +1079,7 @@ m.route = function($window, renderer, pubsub) {
|
||||||
else {
|
else {
|
||||||
renderer.render(root, Node(payload, null, args, undefined, undefined, undefined))
|
renderer.render(root, Node(payload, null, args, undefined, undefined, undefined))
|
||||||
}
|
}
|
||||||
}, function(path, params) {
|
}, function() {
|
||||||
router.setPath(defaultRoute, null, {replace: true})
|
router.setPath(defaultRoute, null, {replace: true})
|
||||||
})
|
})
|
||||||
autoredraw(root, renderer, pubsub, replay)
|
autoredraw(root, renderer, pubsub, replay)
|
||||||
|
|
@ -1077,6 +1088,7 @@ m.route = function($window, renderer, pubsub) {
|
||||||
route.prefix = router.setPrefix
|
route.prefix = router.setPrefix
|
||||||
route.set = router.setPath
|
route.set = router.setPath
|
||||||
route.get = router.getPath
|
route.get = router.getPath
|
||||||
|
|
||||||
return route
|
return route
|
||||||
}(window, renderService, redrawService)
|
}(window, renderService, redrawService)
|
||||||
m.mount = function(renderer, pubsub) {
|
m.mount = function(renderer, pubsub) {
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,10 @@ function updateState(stream, value, error) {
|
||||||
if (recovered === HALT) return
|
if (recovered === HALT) return
|
||||||
updateValues(stream, recovered, undefined)
|
updateValues(stream, recovered, undefined)
|
||||||
}
|
}
|
||||||
catch (e) {updateValues(stream, undefined, e)}
|
catch (e) {
|
||||||
|
updateValues(stream, undefined, e)
|
||||||
|
reportUncaughtError(stream, e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else updateValues(stream, value, error)
|
else updateValues(stream, value, error)
|
||||||
stream._state.changed = true
|
stream._state.changed = true
|
||||||
|
|
@ -81,6 +84,7 @@ function updateDependency(stream, mustSync) {
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
updateState(stream, undefined, e)
|
updateState(stream, undefined, e)
|
||||||
|
reportUncaughtError(stream, e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -96,6 +100,13 @@ function finalize(stream) {
|
||||||
stream._state.changed = false
|
stream._state.changed = false
|
||||||
for (var id in stream._state.deps) stream._state.deps[id]._state.changed = false
|
for (var id in stream._state.deps) stream._state.deps[id]._state.changed = false
|
||||||
}
|
}
|
||||||
|
function reportUncaughtError(stream, e) {
|
||||||
|
if (Object.keys(stream._state.deps).length === 0) {
|
||||||
|
setTimeout(function() {
|
||||||
|
if (Object.keys(stream._state.deps).length === 0) console.error(e)
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function run(fn) {
|
function run(fn) {
|
||||||
var self = createStream(), stream = this
|
var self = createStream(), stream = this
|
||||||
|
|
|
||||||
|
|
@ -312,7 +312,7 @@ o.spec("stream", function() {
|
||||||
o("error.map works", function() {
|
o("error.map works", function() {
|
||||||
var stream = Stream.stream(1)
|
var stream = Stream.stream(1)
|
||||||
var mappedFromError = stream.error.map(function(value) {
|
var mappedFromError = stream.error.map(function(value) {
|
||||||
return "from" + value.message
|
if (value) return "from" + value.message
|
||||||
})
|
})
|
||||||
|
|
||||||
o(mappedFromError()).equals(undefined)
|
o(mappedFromError()).equals(undefined)
|
||||||
|
|
@ -382,7 +382,7 @@ o.spec("stream", function() {
|
||||||
var a = Stream.stream(1)
|
var a = Stream.stream(1)
|
||||||
var b = Stream.combine(function(a) {throw new Error("error from b")}, [a])
|
var b = Stream.combine(function(a) {throw new Error("error from b")}, [a])
|
||||||
var c = Stream.combine(function(a) {throw new Error("error from c")}, [a])
|
var c = Stream.combine(function(a) {throw new Error("error from c")}, [a])
|
||||||
var d = Stream.combine(function(a, b) {return 2}, [a, b])
|
var d = Stream.combine(function(b, c) {return 2}, [b, c])
|
||||||
|
|
||||||
o(d()).equals(undefined)
|
o(d()).equals(undefined)
|
||||||
o(d.error().message).equals("error from b")
|
o(d.error().message).equals("error from b")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue