发生运行时错误时,如何通过本机 Promise 触发全局 onError 处理程序?
How can I trigger global onError handler via native Promise when runtime error occurs?
Q.js I can trigger window.onerror 使用 .done():
window.onerror = function() {
console.log('error from handler');
}
var q = Q('initValue').then(function (data) {
throw new Error("Can't do something and use promise.catch method.");
});
q.catch(function(error){
throw new Error("This last exception will trigger window.onerror handler via done method.");
})
.done();
在原生 Promise (ES6) 中我们没有 .done(),最后一个“.catch”是链的结尾:
var p = new Promise(function () {
throw new Error("fail");
});
p.catch(function (error) {
throw new Error("Last exception in last chain link");
});
"throw new Error(...)" in ".catch" 是重现运行时错误的最简单方法之一.实际上,它可能是运行时错误(EvalError、SyntaxError、TypeError 等)的另一种类比,例如:
var a = [];
a(); // Uncaught TypeError: a is not a function
.done 用法是一个示例,可以更详细地解释我的目标。我没有复制 .done API.
的目标
我的任务是:我在window.onerror上有一个承诺链和处理程序。我可以通过 .cath 处理链内的所有错误,但链末端的运行时错误除外。当在 promise 的方法链末尾发生任何运行时异常时,我需要有挂在 window.onerror.
上的触发处理程序
限制:只能原生JS,必须使用window.onerror.
通过本机 Promise 触发此全局处理程序的最佳方式是什么?
异步抛出错误:
window.addEventListener('error', function() {
console.log('error from handler');
});
new Promise(function () {
throw new Error("fail");
}).catch(function (error) {
setTimeout(() => {throw new Error("Last exception in last chain link")}, 0);
});
Q.js I can trigger window.onerror 使用 .done():
window.onerror = function() {
console.log('error from handler');
}
var q = Q('initValue').then(function (data) {
throw new Error("Can't do something and use promise.catch method.");
});
q.catch(function(error){
throw new Error("This last exception will trigger window.onerror handler via done method.");
})
.done();
在原生 Promise (ES6) 中我们没有 .done(),最后一个“.catch”是链的结尾:
var p = new Promise(function () {
throw new Error("fail");
});
p.catch(function (error) {
throw new Error("Last exception in last chain link");
});
"throw new Error(...)" in ".catch" 是重现运行时错误的最简单方法之一.实际上,它可能是运行时错误(EvalError、SyntaxError、TypeError 等)的另一种类比,例如:
var a = [];
a(); // Uncaught TypeError: a is not a function
.done 用法是一个示例,可以更详细地解释我的目标。我没有复制 .done API.
的目标我的任务是:我在window.onerror上有一个承诺链和处理程序。我可以通过 .cath 处理链内的所有错误,但链末端的运行时错误除外。当在 promise 的方法链末尾发生任何运行时异常时,我需要有挂在 window.onerror.
上的触发处理程序限制:只能原生JS,必须使用window.onerror.
通过本机 Promise 触发此全局处理程序的最佳方式是什么?
异步抛出错误:
window.addEventListener('error', function() {
console.log('error from handler');
});
new Promise(function () {
throw new Error("fail");
}).catch(function (error) {
setTimeout(() => {throw new Error("Last exception in last chain link")}, 0);
});