2016-08-30 4 views
1

Ich lerne SetInterval in JavaScript zum ersten Mal und versuche, einen Wert nach 5 Sekunden zu zeigen. Mein Code ist unten angegeben:setInterval Funktion liefert undefined

<button onclick="myTest()">Try it</button> 

<script> 
function myTest() { 
    const ret = myFunction(); 
    alert(ret); 
} 

function myFunction() { 
    let i = 0; 
    const interval = setInterval(function(){ 
     i += 1; 
     if (i === 5) { 
      clearInterval(interval); 
      return i; 
     } 
    }, 1000); 
} 
</script> 

I 5 möchte benachrichtigt werden, stattdessen ich undefined bin immer. Weiß jemand, warum das passiert? Danke im Voraus!

+1

'myFunction' gibt tatsächlich nichts zurück. – Phylogenesis

+0

Sie können nichts von der anonymen Funktion innerhalb des 'setInterval'-Aufrufs zurückgeben. Sie müssen innerhalb dieser Funktion in die 'Konsole' schreiben. –

+0

Eigentlich ist es nicht nötig, 'ret' und' interval' als 'const' zu deklarieren. –

Antwort

2

Sie können nichts von der anonymen Funktion zurückkehren innerhalb des setInterval Anruf. Sie müssen innerhalb dieser Funktion in die console schreiben. Versuchen Sie folgendes:

function myTest() { 
 
    // this function is now redundant - you could call myFunction() directly 
 
    myFunction(); 
 
} 
 

 
function myFunction() { 
 
    let i = 0; 
 
    const interval = setInterval(function() { 
 
    i += 1; 
 
    if (i === 5) { 
 
     clearInterval(interval); 
 
     console.log(i); // this will appear after 5 seconds... 
 
    } 
 
    }, 1000); 
 
} 
 

 
myTest();

+0

Ok, ja, das hat funktioniert! Ich wusste nicht, dass ich nicht von der setInterval-Funktion zurückkehren würde. Danke vielmals! – user3033194

+1

Es ist eine allgemeine Regel mit asynchronem Code, Sie können einen Wert nicht synchron zurückgeben –

1
return i; 

i Fenster zurückgegeben werden (ich glaube), nicht zu myFunction.

myFunction Rückkehr standardmäßig nicht definiert, wie Sie nicht eine Rückkehr schreiben haben.

function myTest() { 
    myFunction(function(val){ 
     alert(val); 
    }); 
} 

function myFunction(callback) { 
    let i = 0; 
    const interval = setInterval(function(){ 
     i += 1; 
     if (i === 5) { 
      clearInterval(interval); 
      if(callback){ 
       callback(i); 
      } 
     } 
    }, 1000); 
} 

können Sie Ihren Wert in einer Rückruffunktion erhalten.

1

Die Warnung (ret) tritt vor 5 Sekunden vorbei sind und so wird meine Funktion nicht definiert zurück. Versuche diesen Weg.

<button onclick="myTest()">Try it</button> 
<script> 
function myTest() { 
myFunction(); 
} 
function myFunction() { 
var i = 0; 
var interval = setInterval(function(){ 
    i++; 
    if (i === 5) { 
    alert(i); 
     clearInterval(interval); 
    } 
    }, 1000); 

} 
</script> 
Verwandte Themen