2

次のコードは、私が予測したようには機能しません。

jQuery.get("/api/resource/1")
      .then(function(res){ return res.length; })
      .then(function(res){ var length = res; });

length上記の関数から返された長さプロパティの値を取得すると思っていましたが、そうではありません。res の値は連鎖されません。しかし、このコードを dojo で書くと、予測どおりに動作します。

dojo.xhrGet({url:"/api/resource/1"})
    .then(function(res){ return res.length; })
    .then(function(res){ var length = res; });

jQuery を希望どおりに動作させるにはどうすればよいですか?

4

2 に答える 2

1

deferred.pipeが必要だと思います。

于 2012-03-21T16:25:07.407 に答える
0

これは、jQuery の deferred の「then」メソッドが自分自身を返すためです。つまり、同じ遅延オブジェクトに 2 つのハンドラーを追加しました。しかし、dojo の deferred の「then」メソッドは、deferred の連鎖に対して新しいメソッドを返します。ご存じのように、jQuery API のスタイルである Method chainingが原因のようです。ほとんどすべての jQuery の API は、メソッド チェーン パターンに対して自身を返します。

    var def1 = ​$.get("/echo/json").then(function(res) { console.dir(res); 
                      return res; });
    var def2 = def1.then(function(res) { console.dir(res);
                                 return res; });
    ​​​​​​​​if (def1 === def2) {
        console.log(">>> same deferred object.");
    } else {
        console.log(">>> different deferred object.");    
    }
于 2012-03-23T00:59:32.547 に答える