请看下面这行代码:
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 执行模型
WinJS
计算一个对象。- 该对象有一个原型(prototype),其中包含一个
xhr
成员,WinJS.xhr
对其求值。该成员是一个函数,我们将在下面将其称为A
,以便我们清楚到底发生了什么。 - 在此之前,
{ url: "http://someurl.com"}
返回一个对象,我们将其称为B
。 - 对象
B
有一个名为url
的属性。 A(B)
以值B
作为参数调用函数A
。它返回一个我们将称为C
的对象。- 对象
C
有一个原型(prototype),其中包含一个名为then
的成员。C.then
碰巧计算出一个函数。我们将该函数称为D
。 function fulfilled(result) {...}
返回一个我们将称为E
的函数。它也可以称为fulfilled
但该程序片段中未使用该事实。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/