2017-03-09 32 views
0

jScriptでは、複数の匿名setTimeout関数を使用して、次のようなことができますか?私はこのような何かが働いている可能性が期待していたjavascript anonymous setTimeout function

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'); 

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

または多分約束は、移動するための方法ですか?

そうでなければ、私が避けたいと思っていた複数の関数名を持つ深く埋め込まれたネストされた実行ループに終わるようです。

ありがとうございます。

+1

あなたがに見てみたいことがありますpromiseと 'async' /' await'構文を使用します。後者は標準化されていますが、ほとんどのJavaScriptエンジン(node.js、ブラウザなど)ではまだ実装されていませんが、 'async' /' await'をブラウザでサポートされたコードに変換するためにBabelを通じてコードを実行できます。 – Frxstrem

+0

あなたはちょうど毎秒オフに行く目をつけようとしていますか? –

+0

'eventCounter'とは何ですか?誰がそれを増やしますか? – Bergi

答えて

0

私はSO上でこれを見つけたが、残念ながら、私はそれを見つけた場所を覚えておくことができません:

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; 

と別の、おそらくより良い優れたアイデアは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