ete*_*rps 7 javascript jquery jquery-deferred
我仍然试图使用JQuery的Deferred对象来解决问题,并且正在抓住一个特定的问题.在下面的代码中,我最初尝试链接deferred.then()但它从未起作用.所有三个功能一次执行.只有在我的同事向我指出这个pipe功能后,事情就会落到实处.问题是,为什么pipe()工作,但不是then()?
var otherDefer = function(msg){return function(){return testDefer(msg)}};
var there = otherDefer("there,");
var guy = otherDefer("guy.");
function testDefer(msg) {
var deferred = $.Deferred();
pretendAjaxCall( function() {
$('<li>'+msg+'</li>').appendTo('#msgOut');
deferred.resolve();
});
return deferred.promise();
}
function pretendAjaxCall(callback) {
setTimeout(callback,1500);
}
$.when(testDefer("Hi")).pipe(there).then(guy);?
Run Code Online (Sandbox Code Playgroud)
我也试过return deferred而不是return deferred.promise()在使用时when().then().then().
以上代码的jsFiddle:http://jsfiddle.net/eterpstra/yGu2d/
因为jQuery 1.8 then()返回一个新的Promise(与pipe()相同),而不是返回when()返回时相同的Deferred.
在您的示例中将jQuery版本更改为1.8.3或更高版本:
http://jsfiddle.net/eterpstra/yGu2d
和
$.when(testDefer("Hi")).then(there).then(guy);
将工作.
这是您的样本中的工作方式then()和pipe()工作方式:
then()收益递延,并通过调用then()这个相同的 延迟,你只需添加第二个回调也将被称为同时与第一个
pipe()相反,返回新的 Promise允许你构建一个链,这就是为什么你在这种情况下得到顺序调用
有关管道/然后的更多信息,请查看以下资源:
我何时应该使用jQuery deferred的"then"方法,何时应该使用"pipe"方法?
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |