使用Q.js ,我可以使用 .done()触发window.onerror :
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");
});
“ .catch ”中的“ throw new Error(...) ”是重现运行时错误的最简单方法之一。实际上,它可能是运行时错误的另一种模拟(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 触发此全局处理程序的最佳方法是什么?