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

标签 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”的匿名函数“fulfilled”

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

最佳答案

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

Javascript 执行模型

  1. WinJS 计算一个对象。
  2. 该对象有一个原型(prototype),其中包含一个 xhr 成员,WinJS.xhr 对其求值。该成员是一个函数,我们将在下面将其称为 A,以便我们清楚到底发生了什么。
  3. 在此之前,{ url: "http://someurl.com"} 返回一个对象,我们将其称为 B
  4. 对象 B 有一个名为 url 的属性。
  5. A(B) 以值 B 作为参数调用函数 A。它返回一个我们将称为C的对象。
  6. 对象 C 有一个原型(prototype),其中包含一个名为 then 的成员。 C.then 碰巧计算出一个函数。我们将该函数称为 D
  7. function fulfilled(result) {...} 返回一个我们将称为 E 的函数。它也可以称为 fulfilled 但该程序片段中未使用该事实。
  8. D(E) 以值 E 作为参数调用函数 D。没有对返回值进行任何处理。

高级 View

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

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

promise 对象有一个名为 then 的方法,它注册了您可以认为是 promise 完成 时的事件处理程序。值 result - 在 then 中注册的回调中使用的值来自任何通过调用方法 done 来做出 promise done 在这个 promise 上。您看不到执行此操作的代码,因为它位于 WinJS.xhr 的实现中。

WinJS.xhr 正在执行网络请求。当该网络请求完成时,它将通过调用done() 该 promise 的方法。这反过来会调用我们用 then() 方法注册的回调。

关于javascript - Win8 JS 代码 : WinJS. 中的 'result' 是什么 xhr({urlhere}).done(function complete(result) { });,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661727/

相关文章:

javascript - 我可以从 jQuery 中的匿名回调函数返回数据吗?

javascript - 我如何在Mac中处理此文件上传错误?

javascript - 滑出网站的着陆页

c++ - 将 SQLite 与 WinRT 结合使用

Windows 8 Metro 风格 - 游戏引擎

javascript - 日期选择器作为倒计时的输入

JavaScript:new Function() 和 eval()

android - 运行 android AVD 管理器时显示错误 "HAX kernel module is not installed!"

node.js - Azure 表存储查询失败,Windows 应用商店应用程序中出现 AuthenticationFailed 错误

c# - Window App store > 新项目 WindowsRuntimeComponent for background is not working with WCF data service