有誰能告訴我如何處理WinJS代碼中未處理的異常。是否有更好的方式來處理它們而不是使用try/catch塊。我已經在我的代碼的某些部分中使用了try/catch塊。WinJS中未處理的異常
回答
try/catch是處理異常的語言機制。
您是否正在處理常規異常,或者您在異步代碼(承諾內)中是否有未處理的異常?如果是後者,則try/catch將不起作用,因爲設置try/catch的堆棧幀在異步操作完成時消失。
在這種情況下,你需要一個錯誤處理程序添加到您的承諾:
doSomethingAsync().then(
function (result) { /* successful completion code here */ },
function (err) { /* exception handler here */ });
例外沿着承諾鏈傳播,所以你可以放在最後一個處理程序,它會處理中的任何異常那承諾鏈。您也可以將錯誤處理程序傳遞給done()方法。其結果可能是這個樣子:
doSomethingAsync()
.then(function (result) { return somethingElseAsync(); })
.then(function (result) { return aThirdAsyncThing(); })
.done(
function (result) { doThisWhenAllDone(); },
function (err) { ohNoSomethingWentWrong(err); }
);
最後,未處理的異常最終在window.onerror結束了,所以你可以捕捉到他們那裏。我現在只做日誌記錄;試圖恢復你的應用程序,並繼續從頂級錯誤處理程序運行通常是一個壞主意。
我想你是要求相當於一個ASP.NET Webforms Application_Error catchall。相當於ASP.NET的Application_Error方法的WinJS是WinJS.Application.onerror。
使用最好的方法,就是在你的default.js文件(或類似),並添加一個偵聽器,如:
WinJS.Application.onerror = function(eventInfo){
var error = eventInfo.detail.error;
//Log error somewhere using error.message and error.description..
// Maybe even display a Windows.UI.Popups.MessageDialog or Flyout or for all unhandled exceptions
};
這將讓您拍攝擺好出現在應用程序的所有未處理的異常。
鏈接:How-To: Last Chance Exception Handling in WinJS Applications
你真正需要做的治療未處理的異常是掛接到WinJS Application.onerror事件,像這樣(從default.js文件:記住
(function() {
"use strict";
var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
var nav = WinJS.Navigation;
WinJS.strictProcessing();
app.onerror = function (error) {
//Log the last-chance exception (as a crash)
MK.logLastChanceException(error);
};
/* rest of the WinJS app event handlers and methods */
app.start();})();
熊說當WinRT崩潰時,您無法訪問網絡IO,但可以寫入磁盤。
下面是我不得不親自發現的所有這些解決方案的替代方案。無論何時使用promise對象,都要確保done()調用同時處理成功和錯誤情況。如果你不處理失敗,那麼系統最終會拋出一個不會被try/catch塊或通過通常的WinJS.Application.onerror方法捕獲的異常。
這個問題之前,我發現它在我自己花了我2個Windows應用商店的拒絕已經... :(
- 1. 未處理的異常異常
- 2. 使用WinJS的Windows Metro中的Gracefull異常處理
- 3. 處理未處理的異常
- 4. 處理未處理的異常
- 5. 處理未處理的異常問題
- 6. 如何處理未處理的異常?
- 7. DRf,處理未處理的異常
- 8. 未處理的異常
- 9. 未處理的異常
- 10. 未處理的異常
- 11. 未處理的異常:system.typeInitializationException
- 12. createTriangleMesh未處理的異常
- 13. 未處理的異常
- 14. 未處理的異常 「System.IndexOutOfRangeException」
- 15. Cyclone.exe - 未處理的異常
- 16. 未處理的異常java.io.iOException
- 17. ArUco - 未處理的異常
- 18. 未處理的異常MSVCRTD.DLL
- 19. 未處理的異常
- 20. 未處理的異常
- 21. msvcr100d.dll未處理的異常
- 22. strcpy_s未處理的異常?
- 23. 未處理的異常RDL
- 24. asp.net未處理的異常
- 25. 未處理的異常4.3.1
- 26. 未處理的異常(C++)
- 27. .NET未處理的異常
- 28. 未處理的異常
- 29. scrapy未處理的異常
- 30. 未處理的異常:System.FormatException
你不能從錯誤處理程序雖然 –
@TomMcKearney你是正確顯示UI。你必須記錄錯誤,然後讓另一個進程顯示錯誤信息。 – techsaint