2017-03-09 7 views
0

ist es in JScript möglich, etwas wie folgt zu tun mit mehreren anonymen SetTimeout-Funktionen?JavaScript anonyme setTimeout-Funktion

var eventCounter; 

// wait for eventCounter to be equal to 1 
console.log('eventCounter is now equal to one'); 

// pause for eventCounter to be equal to 2 
console.log('eventCounter is now equal to two'); 

// finally, wait for eventCounter to be equal to 3 
console.log('eventCounter is now equal to three'); 

ich so etwas wie dies gehofft hatte, könnte gearbeitet haben:

setTimeout(() => {     // fake code 
    if (eventCounter <= 1234) {  
     this();      // fake code, this() is not a function 
    } else { 
     console.log('eventCounter is now over 1234'); 
    } 
}, 200); 

oder vielleicht Promises ist der Weg zu gehen?

sonst scheint es, als ob ich mit einer Art tief eingebetteten verschachtelten Perform-Schleife mit mehreren Funktionsnamen, die ich gehofft hatte zu vermeiden.

vielen Dank.

+1

Sie möchten schauen Versprechen und die 'async' /' wartet'-Syntax. Letzteres ist standardisiert, aber noch nicht in den meisten JavaScript-Engines (node.js, Browser usw.) implementiert, aber Sie können Ihren Code unter anderem durch Babel ausführen, um "async"/"await" in browsergestützten Code umzuwandeln. – Frxstrem

+0

Willst du nur versuchen, ein Häkchen zu bekommen, um jede Sekunde loszugehen? –

+0

Was ist 'eventCounter'? Wer erhöht es? – Bergi

Antwort

0

fand ich dieses auf SO, aber leider nicht in der Lage bin ich zu erinnern, wo ich es gefunden:

var waitValue = false; 
var counter = 0; 
(function tester() { 
    if (waitValue) { 
     console.log('finally true'); 
    } else { 
     if (counter > 1000) { 
      console.log('waited too long'); 
      process.exit; 
     } else { 
      console.log('still waiting, counter = ' + counter++); 
      setTimeout(tester, 1000); 
     } 
    } 
})(); 
// wait a few seconds and enter this into the console: 
var waitValue = false; 

und andere vielleicht besser ausgezeichnete Idee war suggested here:

(function loop(counter) { 
     if (waitValue) { 
      console.log('waitValue is now true'); 
      resolve('FIRST PROMISE'); 
     } else if (counter <= 0) { // dont wait forever. 
      reject('waited too long'); 
     } else { 
      console.log('Count down: ' + counter); 
      setTimeout(loop.bind(null, counter-1), 3000); 
     } 
    })(counter); // initial value of count-down 
Verwandte Themen