javascript – 为什么$.when().pipe().then()工作,但不是$.when().then().then()?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么$.when().pipe().then()工作,但不是$.when().then().then()?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我仍然试图使用 JQuery的Deferred对象来解决问题,并且正在抓住一个特定的问题.在下面的代码中,我最初尝试链接deferred.then()但它从未起作用.所有三个功能一次执行.只有在我的同事向我指出管道功能后,事情就会落到实处.问题是,为什么pipe()工作,但不是那么()?
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);​

当使用when().then().then()时,我也尝试使用return deferred而不是return deferred.promise().

上面代码的jsFiddle:http://jsfiddle.net/eterpstra/yGu2d/

解决方法

这就是then()和pipe()在你的示例中的工作方式:

then()返回Deferred并通过调用then()对此相同Deferred你只需添加第二个回调函数,它将与第一个同时调用

相反,pipe()返回新的Promise,允许你构建一个链,这就是你在这种情况下获得顺序调用的原因

有关管道/然后的更多信息,请查看以下资源:

When should I use jQuery deferred’s “then” method and when should I use the “pipe” method?

Promise Pipelines in JavaScript

原文链接:https://www.f2er.com/js/158505.html

猜你在找的JavaScript相关文章