以下の関数は期待どおりに動作しません。JS 初心者なので、その理由がわかりません。
newState
かどうかを確認する前に 5 秒待つ必要があります-1
。
現在は待機せず、すぐにチェックします。
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
ベストアンサー1
ブラウザ
新しい
ソリューションはこちら
非同期/待機構文。
必ず確認してくださいブラウザのサポートこれは ECMAScript 6 で導入された言語機能です。
効用関数:
const delay = ms => new Promise(res => setTimeout(res, ms));
使用法:
const yourFunction = async () => {
await delay(5000);
console.log("Waited 5s");
await delay(5000);
console.log("Waited an additional 5s");
};
このアプローチの利点は、コードが同期コードのように見え、動作するようになることです。
Node.js
setTimeout
Node.js 16では、Promise ベースの組み込みバージョンが提供されているため、独自のユーティリティ関数を作成する必要がありません。
import { setTimeout } from "timers/promises";
const yourFunction = async () => {
await setTimeout(5000);
console.log("Waited 5s");
await setTimeout(5000);
console.log("Waited an additional 5s");
};
⚠️ 念のため言っておきますが、競合状態を回避するために wait 関数を使用したくなるかもしれません (たとえば、非同期コードをテストするとき)。これはめったに良い考えではありません。