1

次のコード行を参照してください。

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++ のバックグラウンドを持っているので、このコードがどのように機能するかについて非常に混乱しています。「結果」がこの関数にどのように渡されるのでしょうか。「結果」とは何かについてどこに書いてありますか? 「結果」オブジェクトのタイプと、「ステータス」メンバーがどのように含まれているかを知るにはどうすればよいですか?

4

3 に答える 3

3

私の答えを 2 つの部分に分けます。1 つ目は Javascript の実際の実行モデルに関するもので、2 つ目は記述された高レベルの式に関するものです。

JavaScript 実行モデル

  1. WinJSオブジェクトに評価されます。
  2. そのオブジェクトには、評価されるxhrメンバーを含むプロトタイプがあります。WinJS.xhrそのメンバーは関数であり、A正確に何が起こっているのかを明確にするために、以下で参照します。
  3. それに到達する前に、{ url: "http://someurl.com" }として参照するオブジェクトを返しますB
  4. そのオブジェクトBには、 というプロパティがありますurl
  5. A(B)ABを引数として関数を呼び出します。として参照するオブジェクトを返しますC
  6. そのオブジェクトCには、 という名前のメンバーを含むプロトタイプがありますthenC.thenたまたま関数に評価されます。その機能を と呼びDます。
  7. function fulfilled(result) {...}として参照する関数を返しますE。と呼ぶこともできますfulfilledが、その事実はこのプログラムフラグメントでは使用されていません。
  8. D(E)DEを引数として関数を呼び出します。戻り値は何もしません。

ハイレベルな見方

ここには 3 つの機能があります。1 つはコールバック ( と呼ばれるfulfilled) で、他の 2 つは「メソッド」と呼ばれることがあります。1 つxhrWinJSグローバル オブジェクトでありthen、promise オブジェクトです。

WinJS.xhr({ url: "http://someurl.com" })そのpromise オブジェクトを作成して返します。これについては、ドキュメントを参照することで納得できます。

promise オブジェクトには、 promise が完了thenしたときのイベント ハンドラーとして考えられるものを登録するというメソッドがあります。値- で登録されたそのコールバックで使用される値は、実際にその約束のメソッドを呼び出すことによって、その約束を行っているものから取得されます。の実装のどこかにあるため、それを行うコードは表示されません。resultthendoneWinJS.xhr

WinJS.xhrをしているのかというと、ネットワークリクエストを実行しています。そのネットワーク要求が完了すると、promise のメソッドを呼び出すことにより、promise を介してそのネットワーク要求 (ドキュメントによるとXMLHttpRequestオブジェクト)の結果を通知します。done()次に、メソッドに登録したコールバックを呼び出しますthen()

于 2012-09-30T14:10:55.430 に答える
1

xhrメソッドは、およびコールバック関数を受け取るメソッドを持つPromiseオブジェクトを返します。thenonCompleteonErroronProcress

このコードは、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メソッドを使用して結果を処理する必要があります。

値がサーバーから取得される形式を正確に指定するドキュメントは見つかりませんでした。おそらくどこかにあると思いますが、Microsoft のドキュメントではいつものようにかなり完全ですが、すべてがどこにでもあるわけではないので、特定の情報を見つけるにはさまざまな場所を調べる必要があります。

于 2012-09-30T13:53:42.553 に答える
1

WinJS 関数のドキュメントはまだ良くありません。http://msdn.microsoft.com/en-us/library/windows/apps/br229787.aspxのドキュメントをWinJS.xhr参照すると、それに関する情報が得られます。関数は「ラップします。 .. promise 内の XMLHttpRequest オブジェクト". 個人的には、リファレンス ドキュメントよりも例やクイック スタートを見る方が簡単だと感じました。xhr

関数 (またはそこにある最初の関数) に渡したものfulfilledは、操作の「結果」ではなく、XMLHttpRequestオブジェクトそのものです。その上で、そのプロパティを取得して結果を確認できます - http://msdn.microsoft.com/en-us/library/windows/apps/ms535874.aspxを参照してください。

于 2012-09-30T13:54:53.893 に答える