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' 方法返回自身。也就是说,您将两个处理程序添加到同一个延迟对象中。但是 dojo 的 deferred 的 'then' 方法返回一个新的用于 deferred 的链接。如您所知,这似乎是由 jQuery API 的样式引起的 - 方法链。几乎所有 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 回答