带有一堆函数调用的setTimeout

时间:2017-08-13 21:47:47

标签: jquery settimeout

我有一个ajax功能,返回一个项目列表。然后我获取这些项目的一些定价信息。定价信息来自外部资源并且有点慢,所以我总是加载项目进行适当的DOM更改,然后获取价格。问题是我需要在价格调用之间延迟。我想要的是如下:

loadPricesDelayed
 delay 5sec
loadPricesDelayed
 delay 5sec
loadPricesDelayed
 delay 5sec
loadPricesDelayed

我现在所拥有的是:

        $.each(jsonObject, function (i, obj) {
            ***
            loadPrices(obj.prod, obj.mfg);
            ***
         } 

        function loadPrices(cardName, setName) {
            if (outstandingPricesToFetch == 1)
                setTimeout(function () { loadPricesDelayed(prod, mfg) }, 5000);
            else {
                outstandingPricesToFetch = 1;
                loadPricesDelayed(prod, mfg);             
            }              
        }

        var outstandingPricesToFetch;

        function loadPricesDelayed(prod, mfg) {
             ****
        }

(outstandingPricesToFetch在$ .each之前重置,以防止第一次获取延迟)

此代码产生以下内容

loadPricesDelayed
 delay 5sec
loadPricesDelayed
loadPricesDelayed
loadPricesDelayed

我如何按预期打破延迟?

1 个答案:

答案 0 :(得分:0)

请使用下面的代码,将延迟时间乘以得到所需的结果。

$.each(jsonObject, function (i, obj) {
            ***
            loadPrices(obj.prod, obj.mfg,i);//**change**
            ***
         } 

        function loadPrices(cardName, setName,i) {//**change**
            if (outstandingPricesToFetch == 1)
                setTimeout(function () { loadPricesDelayed(prod, mfg) }, 5000*i);//change
            else {
                outstandingPricesToFetch = 1;
                loadPricesDelayed(prod, mfg);             
            }              
        }

        var outstandingPricesToFetch;

        function loadPricesDelayed(prod, mfg) {
             ****
        }

上面的代码会在0,5,10,15,20秒触发loadPricesDelayed。