2016-10-29 1 views
-1

wie diesen Code zu beheben, wie proJavascript-Schleife mit Verzögerungscode beheben

How do I add a delay in a JavaScript loop?.

wird es immer noch ohne Verzögerung ausgeführt.

const spkz = responsiveVoice.speak; 
let azj = ['hi', 'hello', 'how are ya']; 
var i = 1; // set your counter to 1 

function myLoop() { // create a loop function 

    azj.forEach((item, index) => { 
    setTimeout(() => { // call a 3s setTimeout when the loop is called 
     alert(item); // your code here 
     i++; // increment the counter 
     if (i < index) { // if the counter < 10, call the loop function 
     myLoop(); // .. again which will trigger another 
     } // .. setTimeout() 
    }, 10000) 
    }) 

} 

myLoop(); 
+0

Verwendung '' setTimeout() '' –

+0

bereits mit setTimeout() wird die Schleife ausgeführt, ohne dass sie verzögert wird. => prob. – Isquare

+0

jede Iteration startet sofort ein setTimeout, also kann man Javascript nicht so pausieren –

Antwort

1

versuchen Sie kein Javascript wie die "Pause". Eine setTimout ist asynchron, was bedeutet, dass sie den synchronen Code nicht blockiert. Wenn Sie also irgendeine Art von "for" -Schleife ausführen, ruft sie alle setTimeouts gleichzeitig auf.

Sie können eine manuelle Schleife wie diese machen und verzögern es mit Rekursion:

let azj = ['hi', 'hello', 'how are ya']; 
 
var i = 0; 
 

 
function myLoop() { 
 
    setTimeout(function() { 
 
    console.log(azj[i]) 
 
    i++ 
 
    
 
    if (i < azj.length) { 
 
     myLoop() 
 
    } 
 
    }, 3000) 
 
} 
 

 
myLoop();

Weitere Informationen besuchen Sie this answer.

+0

genannt wird thanks dieses scheint zu arbeiten – Isquare

+0

@Isquare Weil es der genau gleiche Code wie in der Antwort ist, die Sie in Ihrem erwähnt haben Frage ... – Andreas

+0

@Andreas Entschuldigung! Ich hätte stattdessen mit der Antwort verknüpfen sollen. Ich wusste nicht, dass die Antwort in der verknüpften Frage identisch war. –

-1

Sie müssen forEach nicht innerhalb der Schleifenfunktion verwenden. Stattdessen können Sie die Elemente Array zugreifen azj[i]

-2

mit ich nicht wirklich das bekommen die setTimeout(() => { // call a 3s setTimeout when the loop is called vielleicht

var wait = "some amount of milliseconds"

setTimeout(wait) => {

+0

das ist nicht, wie javascript setTimeout –