簡體   English   中英

如何在JavaScript循環中添加其他延遲?

[英]How do I add a different delay in a JavaScript loop?

我想用一個特定的計時器來調用一個函數。 我已經知道setTimeout()函數,但是我遇到了一個問題,這里是:

// mysounds is an array of audio div

mysounds .forEach(function(value, i) {
    myLoop($("#"+value+"_s")[0].duration*1000);
    // I call my function with the duration of the sample from the audio div in parameter
});

function myLoop (timer){           
    setTimeout(function (){    
        alert('hello');
    }, timer);
}

因此,正如您所看到的,forEach循環將被異步調用->數組中的所有聲音將同時播放,我希望它們一個接一個地播放。

您可以為此使用諾言,諾言表示計算最終值,而不是立即值。 首先,讓我們將setTimeout轉換為setTimeout

function delay(ms){
    var dfd = $.Deferred();

    setTimeout(function(){
        dfd.resolve();
    }, ms);

    return dfd.promise();
}

現在,讓我們鏈接對象。 我假設您在數組中引用了它們:

var elements = [el1,el2,el3]; // elements is an array of elements, you can convert
                              // that representation you have now with a loop.

var result = delay(0); // initial value
elements.forEach(function(el){
      result = result.then(function(){ // when our current delay expires
           alert("Hello"); // element available here as `el`
           return delay(1000); // next, wait 1000 ms
      });
});
result.then(function(){
     // in here, everything is resolved.
});

小提琴

     var index = 0,
         timer = 1000;

     setinterval(function () {
                 alert (index)
                 index++;

               }, timer);

這可能會幫助您每1秒調用一次函數,但是如果您想更改計時,則需要清除setinterval並傳入新的計時器,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM