当前位置:首页 > JavaScript

js实现async延迟

2026-02-02 17:25:45JavaScript

使用 setTimeout 封装 Promise 实现延迟

在 JavaScript 中,可以通过 setTimeout 结合 Promise 实现异步延迟。以下是一个简单的实现方式:

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// 使用示例
async function example() {
  console.log('开始');
  await delay(2000); // 延迟2秒
  console.log('2秒后');
}

使用 async/await 结合循环实现精确延迟

如果需要更精确的延迟控制,可以使用循环检查时间差:

js实现async延迟

async function preciseDelay(ms) {
  const start = Date.now();
  while (Date.now() - start < ms) {
    await new Promise(resolve => setTimeout(resolve, 0));
  }
}

取消延迟的功能实现

通过 AbortController 可以实现可取消的延迟:

js实现async延迟

function cancellableDelay(ms, signal) {
  return new Promise((resolve, reject) => {
    const timeout = setTimeout(resolve, ms);
    signal.addEventListener('abort', () => {
      clearTimeout(timeout);
      reject(new Error('Delay cancelled'));
    });
  });
}

// 使用示例
const controller = new AbortController();
cancellableDelay(2000, controller.signal)
  .then(() => console.log('完成'))
  .catch(e => console.log(e.message));

// 取消延迟
controller.abort();

批量延迟任务处理

对于多个需要延迟执行的任务,可以使用 Promise.all

async function batchDelays() {
  const delays = [
    delay(1000).then(() => console.log('任务1')),
    delay(1500).then(() => console.log('任务2')),
    delay(500).then(() => console.log('任务3'))
  ];

  await Promise.all(delays);
  console.log('所有延迟任务完成');
}

动态延迟时间计算

根据条件动态计算延迟时间:

async function dynamicDelay(baseMs, factor) {
  const actualDelay = baseMs * factor;
  await delay(actualDelay);
  console.log(`延迟了${actualDelay}ms`);
}

这些方法提供了不同场景下的异步延迟实现方案,可以根据具体需求选择合适的方式。

标签: jsasync
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…