📜  在 javascript 中设置超时(1)

📅  最后修改于: 2023-12-03 15:23:10.566000             🧑  作者: Mango

在 JavaScript 中设置超时

在 JavaScript 中,我们常常需要对某些操作进行超时限制,以防止程序出现死锁或无响应的状况。本文将介绍一些常用的设置超时的方法。

setTimeout

setTimeout 是一个非常常用的设置超时的方法。它会在指定的时间间隔之后执行一个函数。代码如下:

setTimeout(() => {
  // 执行的代码
}, 1000); // 1秒后执行

需要注意的是,setTimeout 的第一个参数是回调函数,第二个参数是时间间隔(单位是毫秒)。回调函数会在超时时间到达之后执行。

clearTimeout

如果在设置超时之后,我们想要取消这个超时操作,可以用 clearTimeout 方法。代码如下:

const timeoutId = setTimeout(() => {
  // 执行的代码
}, 1000);

clearTimeout(timeoutId); // 取消超时操作

需要注意的是,clearTimeout 方法需要传入一个超时操作的 ID,该 ID 是在 setTimeout 返回的。如果超时操作被取消,回调函数就不会被执行。

setInterval

setInterval 是另一个常用的设置超时的方法。它会按照指定时间间隔重复执行一个函数。代码如下:

setInterval(() => {
  // 执行的代码
}, 1000); // 每隔1秒执行一次

需要注意的是,setInterval 的第一个参数是回调函数,第二个参数是时间间隔(单位是毫秒)。回调函数会在每次时间间隔到达之后执行。

clearInterval

如果在设置超时之后,我们想要取消这个时间间隔操作,可以用 clearInterval 方法。代码如下:

const intervalId = setInterval(() => {
  // 执行的代码
}, 1000);

clearInterval(intervalId); // 取消时间间隔操作

需要注意的是,clearInterval 方法需要传入一个时间间隔操作的 ID,该 ID 是在 setInterval 返回的。如果时间间隔操作被取消,回调函数就不会再被执行。

Promise.race

除了上述的方法之外,ES6 中的 Promise.race 也可以用来设置超时。代码如下:

Promise.race([
  new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('操作成功');
    }, 1000);
  }),
  new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error('操作超时'));
    }, 500);
  })
]).then((result) => {
  console.log(result); // '操作成功'
}).catch((err) => {
  console.error(err); // Error: 操作超时
});

以上代码中,Promise.race 接收一个数组作为参数,这个数组中的每个元素是一个 Promise 对象。Promise.race 会在所有 Promise 对象中,选择最先执行完毕的一个,来返回这个 Promise 对象的执行结果。在以上代码中,第一个 Promise 对象会在 1 秒之后执行完毕,而第二个 Promise 对象只需要 0.5 秒。因此,最终返回的结果是 reject(new Error('操作超时')),因为它是最先执行完毕的 Promise 对象。

总结

以上是在 JavaScript 中设置超时的一些常用方法。如果您想要对某个操作设置超时,可以根据实际情况选择其中一个方法进行使用。