下面的代码不能像我预测的那样工作:
jQuery.get("/api/resource/1")
.then(function(res){ return res.length; })
.then(function(res){ var length = res; });
我以为length
会从上面的函数中获得返回的length属性的值,但事实并非如此。res的值不会被链接。但如果我在dojo中编写这段代码,它将像我预测的那样工作:
dojo.xhrGet({url:"/api/resource/1"})
.then(function(res){ return res.length; })
.then(function(res){ var length = res; });
我该怎么做才能让jQuery按我想要的方式工作?
我想你想要defered.pipe.
这是因为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.");
}