gpt4 book ai didi

javascript - 使用 WinJS 进行错误处理

转载 作者:行者123 更新时间:2023-11-28 06:37:04 25 4
gpt4 key购买 nike

我是 Windows Phone 开发新手。
浏览文档后,我发现“使用 Promises”,可能遗漏了一些东西。

尝试实现教程中的代码:
How to handle errors with promises (HTML)

(function () {
"use strict";

var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;

app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {

} else {

}
args.setPromise(WinJS.UI.processAll());
}

WinJS.Utilities.ready(function () {
var input = document.getElementById('inputUrl');
input.addEventListener('change', changeHandler);
}, false);
};

app.oncheckpoint = function (args) {

};

function changeHandler(e) {
var input = e.target;
var resultDiv = document.getElementById("result");
var div2 = document.getElementById("div2");

WinJS.xhr({url: e.target.value})
.then(function (result) {
if (result.status === 200) {
resultDiv.style.backgroundColor = "lightGreen";
resultDiv.innerText = "Success";
}
return result;
})
.then(function (result) {
if (result.status === 200) {
resultDiv.style.backgroundColor = "yellow";
}
},
function (e) {
resultDiv.style.backgroundColor = "red";

if (e.message != undefined) resultDiv.innerText = e.message;
else if (e.statusText != undefined) resultDiv.innerText = e.statusTExt;
else resultDiv.innerText = 'Error';
});
}

app.start();
})();
  1. 如果我写一个简单的字符串而不是 URL 格式,我会得到一个未处理的异常。我认为所有异常都将由 then() 第二个参数处理。

  2. 不太了解上面的 XHR 代码或此替代代码之间的区别:

     WinJS.xhr({ url: e.target.value }).then(

    function completed(result) {
    if (result.status === 200) {
    resultDiv.style.backgroundColor = "lightGreen";
    resultDiv.innerText = "Success";
    }
    },
    function error(e) {
    resultDiv.style.backgroundColor = "red";

    if (e.message != undefined) resultDiv.innerText = e.message;
    else if (e.statusText != undefined) resultDiv.innerText = e.statusTExt;
    else resultDiv.innerText = 'Error';
    }
    )
  3. 教程最后有一个使用 WinJS.promise.onerror 的示例。我不明白在哪里以及如何实现它。如果有人可以树立榜样,我将不胜感激。

最佳答案

我不完全确定你所说的#1 是什么意思,但让我回答我能回答的。

首先,如果将 Promise 与多个 .then().then() 调用链接在一起,则需要确保每个已完成函数中的每个返回值本身就是一个 Promise。对于 WinJS.xhr,只涉及一个 Promise。因此,您的第二个代码示例是正确的,因为在第一个代码示例中,您返回非 promise 结果并尝试将另一个 .then 附加到它,但这是行不通的。

其次,对于 Windows 应用程序,正确的做法是使用 .done() 作为链中的最后一个 promise 。当您有像 WinJS.xhr 这样的单一 Promise 方法时,只需使用 .done()。

这样做的原因是 .done 确保链中较早发生的异常不会被吞噬并因此消失。它确保链中任何位置的所有错误都被路由到最后的错误处理程序。

我认为,正如您所描述的,#1 所发生的情况是,如果您给 WinJS.xhr 提供一个非 URL,它将抛出一个异常,这将使 WinJS.xhr 返回的 promise 进入错误状态。您的第一个 .then() 调用查找错误处理程序,但没有看到错误处理程序,并且因为您正在使用第二个不需要的 .then,并且根本没有使用 .done,所以该异常不会在 promise 流程中出现而是被调试器拾取。

WinJS.Promise.onerror 的目的是为 Promise 中发生的所有异常提供单个处理程序。这对于处理像您正在做的特定错误情况没有用;它更多地意味着实现通用记录器等。

PS,我在我的免费电子书 Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition 的附录 A“揭秘 Promises”中写了很多关于 Promise 的内容。 .

关于javascript - 使用 WinJS 进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34182671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com