Win8 JS代码中的'结果'是什么:WinJS.xhr({urlhere})。done(function complete(result){});

时间:2012-09-30 13:46:56

标签: javascript windows-8 microsoft-metro

请参阅以下代码行:

WinJS.xhr({ url: "http://someurl.com" }).then(
          function fulfilled(result)
          {
             if (result.status === 200)
             {
                resDiv.style.backgroundColor = "lightGreen";
                resDiv.innerText = "Success";
             }
          });

据我所知,当WinJS.xhr完成它所做的任何事情然后执行带有参数'result'的匿名函数'履行'

来自Java / C ++背景,我对此代码的工作方式非常困惑 - 如何将“结果”传递给此函数?它在哪里说“结果”是什么?我如何知道对象“结果”的类型以及它如何具有“状态”成员?

3 个答案:

答案 0 :(得分:3)

我将把我的答案分为两部分:第一部分涉及Javascript的实际执行模型,第二部分涉及写入的高级表达式。

Javascript执行模型

  1. WinJS评估对象。
  2. 该对象有一个原型,其中包含xhr成员WinJS.xhr进行评估。该成员是一个函数,我们将在下面将其称为A,以便我们可以清楚地知道究竟发生了什么。
  3. 在我们开始之前,{ url: "http://someurl.com" }会返回一个我们称之为B的对象。
  4. 该对象B有一个名为url的属性。
  5. A(B)调用函数A,其值为B作为参数。它返回一个我们将称为C
  6. 的对象
  7. 该对象C有一个原型,其中包含一个名为then的成员。 C.then恰好评估函数。该功能我们将称为D
  8. function fulfilled(result) {...}会返回一个我们称之为E的函数。它也可以称为fulfilled,但该程序片段中未使用该事实。
  9. D(E)调用函数D,其值为E作为参数。返回值没有任何效果。
  10. 高级视图

    这里有三个功能;一个是回调(称为fulfilled),另外两个可以称为“方法” - xhr全局对象的一个​​WinJS和promise对象的then

    WinJS.xhr({ url: "http://someurl.com" })创建并返回promise object。您可以通过咨询the documentation来说服自己。

    promise对象有一个名为then的方法,它记录了你可以想到的作为事件处理程序的时间完成 。在result中注册的回调中使用的值then来自于通过在该承诺上调用方法done而使完成承诺的任何内容。您没有看到执行此操作的代码,因为它位于WinJS.xhr的实现中。

    WinJS.xhr正在执行的是执行网络请求。当该网络请求完成时,它将通过调用done()方法通过promise发出该网络请求的结果(根据文档是XMLHttpRequest对象)。那个承诺。这反过来调用我们使用then()方法注册的回调。

答案 1 :(得分:1)

xhr method返回Promise object,其中then method带有onCompleteonErroronProcress回调函数。

此代码仅使用onComplete回调。请求完成后调用回调函数,并发送一个带有服务器发送值的参数。

如果你不熟悉回调函数,如果你声明一个常规函数用作回调函数可能会更清楚:

function fulfilled(result) {
  if (result.status === 200) {
    resDiv.style.backgroundColor = "lightGreen";
    resDiv.innerText = "Success";
  }
}

WinJS.xhr({ url: "http://someurl.com" }).then(fulfilled);

then方法用于预处理结果,您应该使用done method来处理结果。

我在文档中没有找到任何指定服务器值的确切形式的内容。它可能存在于某个地方,但与Microsoft文档一样,它相当完整,但并不是所有地方都是如此,所以你必须在不同的地方寻找特定的信息。

答案 2 :(得分:1)

WinJS功能的文档仍然不是很好,IMO。您可以在http://msdn.microsoft.com/en-us/library/windows/apps/br229787.aspx查看WinJS.xhr的文档,这将为您提供一些相关信息 - 它表示xhr函数“在承诺中包装... XMLHttpRequest对象” 。就个人而言,我发现更容易查看示例/快速入门,而不是参考文档。

您传递给fulfilled函数(或其中的第一个函数)的不是操作的“结果”,而是XMLHttpRequest对象本身。在那你可以得到它的属性来查看结果 - 看看http://msdn.microsoft.com/en-us/library/windows/apps/ms535874.aspx作为参考。