Javascript 为什么;失败;在承诺中不捕捉错误?

Javascript 为什么;失败;在承诺中不捕捉错误?,javascript,windows-runtime,promise,winjs,Javascript,Windows Runtime,Promise,Winjs,我正在尝试访问一个可能不存在的文件: var localFolder = Windows.Storage.ApplicationData.current.localFolder; localFolder.getFileAsync(stateFile).then(function (file) { Windows.Storage.FileIO.readTextAsync(file).then(function (text) { // do somethin

我正在尝试访问一个可能不存在的文件:

var localFolder = Windows.Storage.ApplicationData.current.localFolder;

localFolder.getFileAsync(stateFile).then(function (file) {
            Windows.Storage.FileIO.readTextAsync(file).then(function (text) {
        // do something with the text

    });
}, function (err) {
    // log error, load dummy data

});
如果文件不存在,则会调用“fail”方法,但只有在我的应用程序因异常“file not found”而停止后,才会调用该方法。只有当我为调试器按“continue”时,调试器才会继续执行“fail”方法


我做错了什么?我应该事先检查是否存在吗?

您看到的是第一次机会例外。调试器在抛出点中断。如果点击调试器对话框上的“继续”按钮,应用程序将继续运行,异常处理程序将运行


您可以通过使用“Debug | Exceptions”(调试|异常)菜单关闭first chance Exceptions(首次出现异常)来更改此设置。

我已经为这个问题苦苦挣扎了两三天,最终找到了以下解决方案:我使用GetFileAsync函数获取文件夹中所有文件的列表,然后查看此列表以了解所需文件是否存在。在那之后,我可以调用getFileAsyns而无需抛出。不是很漂亮,但对我来说很管用。我同意假设开发人员可以关闭异常并不是最好的建议。。。在我看来,这个问题应该被视为RT实现中的一个bug。

为什么会有失败的方法?我在这里有点迷路了……)算了吧,我以为你在谈论jQuery的承诺。抱歉。我很确定WinJS Promise==jQuery Promise在行为方面。如果行为与jQuery相同,
fail
只是检查相关承诺的状态(已拒绝或已解决),它不处理内部异常/错误。您的调试器可能设置为在第一次出现异常时停止。这意味着它将在异常处理之前进入调试器。你是对的,但作为开发人员,我不能关闭“第一次机会异常”,对吗?那么我每次都会看到这个错误消息吗?当然可以。转到“调试”菜单的“异常”菜单项。在对话框中,您应该看到一个树状视图。在“JavaScript运行时异常”下,关闭“抛出”列中的复选框,这将关闭“第一次机会中断”异常。不过,您可能希望记住此复选框的位置—在跟踪异步代码中的问题时,第一次出现异常非常方便。但这正是我的观点。我知道我可以关闭这个复选框。我只是说作为一个开发者,我真的不应该。这就是为什么你的建议对我来说没有意义的原因:/它不难,也不快。第一次机会例外真的很吵。因此,我认为最好关闭它们,直到看到问题为止。然后重新打开它们,查看是否出现异常,进行调试,然后再次关闭它们。如果不知道“第一次机会”的具体情况,我会回答try/catch忽略异常。毕竟,这意味着您希望fail()处理一个不存在的文件。