失败的promise会被Application.onerror函数捕获
Failing promise gets catched by the Application.onerror function
有一个奇怪的行为,我不知道它是应该发生的还是winjs错误。
我使用WinJS.UI.Pages.render
来呈现特定元素下的页面内容。
我面临的问题是,无论我是否处理render
函数的失败,"错误"都会不断传播,并被onerror
函数"捕获"。
以下是我的代码的快速视图:
function goFunction() {
WinJS.UI.Pages.render('otherpage.html', root).then(null, failedNavigating);
}
function noGoFunction() {
WinJS.UI.Pages.render('missingpage.html', root).then(null, failedNavigating);
}
function failedNavigating() {
console.log('failed to navigate');
}
WinJS.Application.onerror = function (args) {
debugger;
};
otherpage.html
页面存在,因此可以执行渲染,一切正常。但missingpage.html
并不存在。在这种情况下,failedNavigating
函数会执行,到目前为止还不错,但随后WinJS.Application.onerror
处理程序会被"调用"。
这就是应该的工作方式吗?我错过了什么?
这是一个完整的项目,有一个repro,以防有人想看一看。
我终于在您的GitHub问题中调试了这个问题。这是因为WinJS.UI.Pages.render隐式创建了一个页面,默认情况下,该页面有一个创建错误承诺的错误处理程序,应用程序将其检测为"未处理的错误承诺",因为它没有任何继续。
你现在可以用这样的东西来解决它:
function noGoFunction() {
WinJS.UI.Pages.define('missingpage.html', {
error: function (e) {
console.log("Page failed to load");
}
});
WinJS.UI.Pages.render('missingpage.html', root).then(null, failedNavigating);
}
function failedNavigating() {
console.log('failed to navigate');
}
只有.done能够捕获并抛出错误。
请参见此处:http://msdn.microsoft.com/en-us/library/windows/apps/br211867.aspx差异。
正如你所看到的,两者几乎完全相同,除了这一点:"在处理程序完成执行后,这个函数抛出任何从那时起作为错误状态下的承诺返回的错误。"这只出现在.done.中
试着用一个done来代替你,看看它是否有效。
看看这个:http://msdn.microsoft.com/en-us/library/windows/apps/br229728.aspx
promise.then(onComplete, onError, onProgress).done( /* Your success and error handlers */ );
on完整
类型:功能
如果某个值成功实现了promise,则要调用的函数。值为作为单个参数传递。如果该值为null,则该值为返回。从函数返回的值变为已实现到那时,承诺的价值已经返回如果在该函数正在执行,然后返回的promise将移动进入错误状态
所以基本上发生这种情况是因为.done 的onCompleted参数为null
试着用一个函数代替
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 如何将多个onError函数分配给promise(由angular's$http.post返回)
- 将图像的 onError 函数转换为返回函数
- jQuery Lazy onError - 设置 onclick 函数
- 失败的promise会被Application.onerror函数捕获
- Javascript/JQuery-如何为损坏的图像重置onError函数?(对于第二个断开的图像)
- 窗口.Onerror函数在不同浏览器上的处理方式不同
- 在onerror函数中重写img标签的onerror函数