带有延迟的 jQuery 函数链接:.done()-Function 立即调用

Posted

技术标签:

【中文标题】带有延迟的 jQuery 函数链接:.done()-Function 立即调用【英文标题】:jQuery function chaining with deferred: .done()-Function instantly called 【发布时间】:2018-02-13 13:49:21 【问题描述】:

我正在尝试在多个函数中获取一些数据,并希望将它们链接起来,以便仅在正确加载所有数据时执行最后一个函数。

问题是 .done() 部分中的函数会立即被调用,而不是等到 Deferred-Object 被解决。我也尝试过用 .then() 链接它们,但这也没有用。

var array1, array2;

function doStuffWithReceivedData() 
    // Working with the data


function getArray1() 
    var defArray1 = $.Deferred();

    $.getJSON(url, function(data) 
        if (data.success) 
            array1 = data.payload;
            defArray1.resolve();
         else 
            // Information displayed that there was an error
        
    )

    return defArray1;


// Function 2 is like the first one
function getArray2() ...;

$(document).read(function() 
    getArray1()
        .done(getArray2()
            .done(doStuffWithReceivedData()));

【问题讨论】:

您正在调用这些方法,而不是提供它们的引用。去掉括号。 使用这个--getArray1().promise().done(function() doStuffWithReceivedData() ); ***.com/questions/15886272/… 删除括号就可以了!谢谢大家。 【参考方案1】:

.done() 的参数必须是函数。您正在调用该函数,而不是传递它。去掉括号。

$(document).ready(function() 
    getArray1()
        .done(function() 
            getArray2().done(doStuffWithReceivedData));
        

【讨论】:

以上是关于带有延迟的 jQuery 函数链接:.done()-Function 立即调用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery的延迟对象

jQuery的延迟对象

jquery的deferred使用详解

jQuery源码 02--(3043 , 3183) Deferred : 延迟对象 : 对异步的统一管理

jquery的deferred使用详解

jQuery中的wait()或sleep()函数?