私はjavascriptで新しく、機能が終了するのを待っていると忙しいです。私はここにコードを持っていないが、私はすぐにそれを説明します:JavaScript:特定の時間の終了を待っています
私は100ミリ秒、あるいは10秒を実行することができる一つの機能を持っている、のは、FOO1
それを呼びましょうそれから私は別のものを持っています関数Foo2は、まず入力パラメータで動作し、次にFoo1を呼び出します。入力パラメータの1つは時間(ミリ秒単位)です。機能が終了するまで待つことを望みました。実行がこの制限を超えている場合は、を実行して終了の手順に戻ります。の時間を超える前にFoo1が終了した場合は、を返します。より前にを返してください。
私のソリューションはここでは基本的なコード構文ですが、うまくいけばわかります。
// First wait for the specified time and then execute Foo1 - obviously one after another
self.Foo2 (time) {
setTimeout(self.Foo1(),0);
var now = new Date().getTime();
while(new Date().getTime() < now + time){ /* do nothing */ }
}
/*This one, if I understand it well, creates a queue where at first DoWait
is executed, then Foo1 and after that all other DoWait - so practically
we wait the whole time of execution.*/
var finished = false;
self.DoWait(time, now) {
if(!finished && (new Date().getTime() < now + time)) {
setTimeout(self.DoWait(time, now), 20);
} else {
/* finish procedure */
}
}
self.Foo2 (time) {
setTimeout(function() { self.Foo1(); finished=true;},0);
var now = new Date().getTime();
self.DoWait(time, now)
}
あなたはそれを行うことは可能ですかいくつかのソリューションについて知っていますか?私は約労働者について読んでいますが、ワーカーを作成するには新しいファイル全体で機能が必要ですが、関数/ファイル内で行うことができます。 すべての回答をお待ちしております。
解決策はJavaScriptでビジー待機しないことです。 – Bergi
'setTimeout(self.Foo1()、0)'はすぐに '' self.Foo1() 'を呼び出します。タイムアウト後ではありません。あなたは 'setTimeout(Foo1.bind(self)、0)'を書く必要があります。 – Barmar
実際には 'setTimeout(self.Foo1.bind(self)、0)'です。 – Barmar