快速入门:使用承诺(使用 Ja…

http://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/hh700339.aspx

你可以通过异步执行某些种类的处理来使 UI 更具响应性,从而使应用的 UI 线程自由响应用户输入。本快速入门展示如何在 Windows 应用商店应用中执行异步编程。

适用于 JavaScript 的 Windows 库中和 Windows 运行时中的异步 API 在 JavaScript 中以承诺形式表示,承诺是在常见 JS Promises/A 提议中定义的。你可以在 JavaScript 中的异步编程中找到有关异步编程和承诺的详细信息。

当你使用承诺时,你可以添加一些错误处理使你的代码更加可靠。本快速入门仅显示可用于处理错误的多种方法之一,但是你可以在如何使用 JavaScript 中的承诺处理错误中了解更多内容。

先决条件

要完成本快速入门,你需要能够创建一个使用 Windows JavaScript 库的基本 Windows 应用商店应用。有关创建第一个应用的帮助,请参阅创建第一个采用 JavaScript 的 Windows 应用商店应用

说明

1. 使用返回承诺的函数

让我们看一个简单的承诺示例。 我们将创建一个应用,该应用使用一个 URL 并尝试与该站点联系,然后报告联系是否成功。

  1. 创建一个名为 TestPromise 的空白 Windows 应用商店应用。

  2. 添加一个 INPUT 元素。

    
    <</span>div>
    <</span>input id="inUrl" />
    </</span>div>
    
    
    
  3. 添加一个显示该 URL 的结果的 DIV 元素。

    
    <</span>div id="divResult">Result</</span>div>
    
    
    
  4. 为 INPUT 元素添加一个更改处理程序。可以作为 WinJS.Utilities.ready 函数的一部分执行此操作。它在 DOMContentLoaded 事件之后被立即调用,而该事件在解析页面之后,但在加载所有资源之前触发。

    
    WinJS.Utilities.ready(function () { 
    
     var input = document.getElementByIdx_x("inUrl");
        input.addEventListener("change", changeHandler); 
    
     }, false);
    
    
  5. 在更改处理程序中调用 xhr,同时向其传递用户输入的 URL,并使用结果更新结果 DIV。xhr 函数返回 Promise,因此我们可以使用承诺的 then 或 done 函数来更新 UI。只要 xhr 函数成功发出 XmlHttpRequest 或已获取错误,就会执行 then 方法。done 函数相同,但保证其引发该函数内未处理的任何错误除外。

    你最多可以向 then 或 done 提供三个参数:一个是在承诺得到履行且没有错误后处理该承诺的completed 函数;一个是处理错误的 error 函数;一个是显示承诺完成进度的 progress 函数。现在,我们将仅说明如何添加 completed 函数,并且为另外的步骤保存错误处理。completed 函数将 result DIV 的背景色设为绿色,并且将文本设置为“Success”。

    
    function changeHandler(e) { 
    
     var input = e.target; 
    
     var resDiv = document.getElementByIdx_x("divResult"); 
    
     WinJS.xhr(
    
    
         { url: e.target.value }).then(
    
    
          function completed(result) { 
    
               if (result.status === 200) { 
    
                resDiv.style.backgroundColor = "lightGreen"
    
                resDiv.innerText = "Success"
    
     } 
    
     }); 
    
     }
    
  6. 生成并调试该应用,然后输入一个 URL。(当你输入 URL 后,你可能需要在 INPUT 控件外单击,以便更改事件出现。)如果 URL 有效,则 result DIV 应该变为绿色并显示“Success”。如果输入的 URL 无效,则不会发生任何事情。

2. 处理错误

  1. 要进行错误处理,请在 then 函数内部添加一个 error 函数,以便将 Success 按钮的背景色设置为红色,并且将文本设置为错误消息(如果有)。

    
    function changeHandler(e) { 
    
     var input = e.target; 
    
     var resDiv = document.getElementByIdx_x("divResult"); 
    
     WinJS.xhr({url: e.target.value}).then( 
    
     function fulfilled (result) { 
    
     if (result.status === 200) 
    
    
     resDiv.style.backgroundColor = "lightGreen"
    
    
     resDiv.innerText = "Success"
    
    
     } 
    
    
     }, 
    
    
    function error(e) { 
    
    
     resDiv.style.backgroundColor = "red"
    
    
    if (e.message != undefined) {  // If the URL is really malformed or blank.
                resDiv.innerText = e.message; 
    
    
     }
                else if (e.statusText != undefined) { // If an XmlHttpRequest is made.
                    resDiv.innerText = e.statusText;
                } 
    
    
    else
    
    
     resDiv.innerText = "Error"
    
    
     } 
    
    
     }); 
    
    
    }
    
  2. 生成并调试该应用。如果输入的 URL 无效,按钮将变为红色并显示错误消息。

摘要 和 next steps

在本快速入门中,你了解了如何使用返回承诺的函数以及如何执行一种错误处理。

下面的主题就更复杂的承诺方案进行了说明:

 

相关主题

使用 JavaScript 异步编程
发布了76 篇原创文章 · 获赞 4 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章