474

以下のこの関数は、私が望むようには機能しません。JSの初心者なので、理由がわかりません。

であるかどうかを確認する前に5秒待つ必要がありnewStateます-1

現在、待機せず、すぐにチェックします。

function stateChange(newState) {
  setTimeout('', 5000);

  if(newState == -1) {
    alert('VIDEO HAS STOPPED');
  }
}
4

16 に答える 16

451

あなたはあなたが提供するコールバック関数にあなたのコードを入れなければなりませんsetTimeout

function stateChange(newState) {
    setTimeout(function () {
        if (newState == -1) {
            alert('VIDEO HAS STOPPED');
        }
    }, 5000);
}

他のコードはすぐに実行されます。

于 2013-01-09T01:11:34.453 に答える
107

非同期関数を使用している場合は、1 行で簡単に実行できます。

console.log(1);
await new Promise(resolve => setTimeout(resolve, 3000)); // 3 sec
console.log(2);

参考までに、ターゲットがNodeJSの場合、必要に応じてこれを使用できます (事前定義された約束された setTimeout 関数です):

await setTimeout[Object.getOwnPropertySymbols(setTimeout)[0]](3000) // 3 sec
于 2018-07-23T16:02:35.857 に答える
46

javascriptで5秒間一時停止しようとしないでください。それはそのようには機能しません。コードの関数を今から5秒後に実行するようにスケジュールできますが、後で実行するコードを関数に入れる必要があり、その関数の後の残りのコードはすぐに実行され続けます。

例えば:

function stateChange(newState) {
    setTimeout(function(){
        if(newState == -1){alert('VIDEO HAS STOPPED');}
    }, 5000);
}

ただし、次のようなコードがある場合:

stateChange(-1);
console.log("Hello");

console.log()ステートメントはすぐに実行されます。関数でタイムアウトが発生するまで待機しませんstateChange()。javascriptの実行をあらかじめ決められた時間だけ一時停止することはできません。

代わりに、遅延を実行するコードは、setTimeout()コールバック関数内にある(またはその関数から呼び出される)必要があります。

ループして「一時停止」しようとした場合は、基本的にJavascriptインタープリターを一定期間「ハング」させます。Javascriptはコードを単一のスレッドでのみ実行するため、ループしているときは他に何も実行できません(他のイベントハンドラーを呼び出すことはできません)。したがって、他のコードを実行してその変数を変更することはできないため、一部の変数が変更されるのを待つループは機能しません。

于 2013-01-09T01:13:47.263 に答える
11

これを試して:

//the code will execute in 1 3 5 7 9 seconds later
function exec() {
    for(var i=0;i<5;i++) {
        setTimeout(function() {
            console.log(new Date());   //It's you code
        },(i+i+1)*1000);
    }
}
于 2015-11-03T11:51:21.627 に答える
8
setTimeout(function() {
     $('.message').hide();
}, 5000);

これにより、5 秒後に '.message' div が非表示になります。

于 2020-09-30T18:47:00.963 に答える
6

関数に小さな変更を加えることで遅延を追加できます ( async および await )。

const addNSecondsDelay = (n) => {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, n * 1000);
  });
}

const asyncFunctionCall = async () {

  console.log("stpe-1"); 
  await addNSecondsDelay(5);
  console.log("step-2 after 5 seconds delay"); 

}

asyncFunctionCall();
于 2020-01-09T10:30:23.997 に答える
-4

新しい Js 関数を作成する

function sleep(delay) {
        var start = new Date().getTime();
        while (new Date().getTime() < start + delay);
      }

実行を遅らせたい場合は、関数を呼び出します。遅延値には int でミリ秒を使用します。

####Some code
 sleep(1000);
####Next line
于 2018-05-22T08:15:26.000 に答える