2017-08-23 48 views
3

因此次發出聲音,讓我們說我有一個這樣的陣列和一個循環來遍歷它:Chrome擴展:通過數組循環,並根據每分鐘

var song = ['A', 'A', 'A']; 
for (let n = 0; n < song.length; n++) { 
    // run 'the function' at 100 BPM... 
    // what I tried: 
    setTimeout(function() { 
    the function // obviously this won't work 
    }, beatsPerMinute); 
} 

我有一個函數已經寫將這些字母串轉換成聲音。我面臨的問題是時機。目前,所有的聲音立刻開始。

如何儘可能準確地運行「函數」,以便每分鐘跳動?

+0

so setTimeout is not accurate? –

+0

是BeatsPerMinute的定義? –

回答

1

setTimeout()函數是非阻塞的,將立即返回。

var song = ['A', 'A', 'A']; 
var n = 0; 
function makeSound() { 
    setTimeout(function(){ 
     theFunction(song[n]); 
     n++; 
     if (n < song.length) 
      makeSound(); 
    }, beatsPerMinute) 
} 
makeSound();