等待 5 秒,然后执行下一行

2022-08-29 23:05:31

下面的这个函数不像我想要的那样工作;作为一个JS新手,我不知道为什么。

我需要它等待5秒钟,然后再检查是否是.newState-1

目前,它不会等待,它只是立即检查。

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

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

答案 1

您必须将代码放在您提供给的回调函数中:setTimeout

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

任何其他代码将立即执行。


答案 2

浏览器

下面是使用新的异步/等待语法的解决方案

请务必检查浏览器支持,因为这是 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");
};

此方法的优点是,它使代码的外观和行为类似于同步代码。

节点.js

Node.js 16 提供了一个基于 promise 的内置版本,因此我们不必创建自己的实用程序函数:setTimeout

import { setTimeout } from "timers/promises";

const yourFunction = async () => {
  await setTimeout(5000);
  console.log("Waited 5s");

  await setTimeout(5000);
  console.log("Waited an additional 5s");
};

⚠️ 只是为了记录,您可能想使用等待函数来规避争用条件(例如,在测试异步代码时)。这很少是一个好主意。