2017-08-14 8 views
0

と等しくなるまで、私は、変数の設定に遅延を追加することを計画してい...変数ではJavaScriptを使用して1に等しいかどうかを確認するために待ち変数が

myvalue = 1; 
 

 
function check() { 
 
    if (myvalue == 1) { 
 
     return setTimeout(check, 1000); 
 
    } 
 

 
    alert("Value Is Set"); 
 
} 
 

 
check();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

をしようとしていますしかし今のところ、なぜこの単純なバージョンが動作しないのですか?

+0

不明、何を求めていますか?あなたは同じ関数を呼び出していて、毎回 'if'ループの中に入ります。そう? –

+1

[JavaScriptまたはjQueryの変数の変更をリッスンする](https://stackoverflow.com/questions/1759987/listening-for-variable- changes-in-javascript-or-jquery) – Liam

+1

ここではjQueryコードまたは 'myvalue'の値を変更するコードは表示されません –

答えて

1

setTimeout(check, 1000);を使用すると、この関数が1回だけ呼び出されます。それはあなたが探しているものではありません。

あなたが探しているのは、nミリ秒ごとに関数を実行するsetIntervalです。

setIntervalを使用して値が1になるのを待っている次の例を参照してください。その後、setIntervalインスタンスをクリアしてください。以下のスニペットを実行しているとき

待ち4秒:

// First - set the value to 0 
 
myvalue = 0; 
 

 
// This variable will hold the setInterval's instance, so we can clear it later on 
 
var interval; 
 

 
function check() { 
 
    if (myvalue == 1) { 
 
     alert("Value Is Set"); 
 

 
     // We don't need to interval the check function anymore, 
 
     // clearInterval will stop its periodical execution. 
 
     clearInterval(interval); 
 
    } 
 
} 
 

 
// Create an instance of the check function interval 
 
interval = setInterval(check, 1000); 
 

 
// Update the value to 1 after 4 seconds 
 
setTimeout(function() { myvalue = 1 }, 4000);

+0

"setTimeout関数のインスタンス"は返されません。戻り値を返します。元のコードも動作するはずですが、問題はほとんど値が設定されていない可能性が高いです。 – Matthias247

+0

それでも間違っています。最初のタイムアウトで 'check'が呼び出され、次の' setTimeout'が開始されます。 'return'キーワードは不要ですが、全体的な振る舞いはsetIntervalベースのものと変わりません。 – Matthias247

+0

ええ、私は悪い目でした。チェックが 'if(myvalue!= 1)'であったならば、OPコードはうまくいきました。これは最初に見たものです。その後、同期setTimeoutループが実行され、setIntervalベースのソリューションと同様の動作をします。 setIntervalは必要ではないことを指摘したいが、setTimeoutは(正しく使用されていれば)同じことをすることができる。 – Matthias247