当前位置:首页 > JavaScript

js实现async

2026-04-05 17:30:30JavaScript

js实现async

使用 Promise 实现 async/await

在 JavaScript 中,async/await 是建立在 Promise 之上的语法糖。可以通过 Promise 和生成器函数模拟 async/await 的行为。

js实现async

function asyncGenerator(generatorFunc) {
  return function (...args) {
    const generator = generatorFunc(...args);
    function handle(result) {
      if (result.done) return Promise.resolve(result.value);
      return Promise.resolve(result.value)
        .then(res => handle(generator.next(res)))
        .catch(err => handle(generator.throw(err)));
    }
    return handle(generator.next());
  };
}

示例用法

定义一个生成器函数并使用 asyncGenerator 包装:

const fetchData = () => new Promise(resolve => setTimeout(() => resolve('Data fetched'), 1000));

const asyncFunc = asyncGenerator(function* () {
  try {
    const data = yield fetchData();
    console.log(data); // 输出: Data fetched
    return data;
  } catch (error) {
    console.error(error);
  }
});

asyncFunc();

手动实现 async/await 的核心逻辑

  1. 生成器函数:使用 function* 定义生成器函数,通过 yield 暂停执行。
  2. 递归处理:通过递归或循环处理生成器的每一步,将 Promise 的结果传递回生成器。
  3. 错误处理:捕获 Promise 的异常并通过 generator.throw 抛出。

完整实现

function asyncify(generatorFunc) {
  return function (...args) {
    const generator = generatorFunc(...args);

    const step = (nextValue, isError = false) => {
      const result = isError ? generator.throw(nextValue) : generator.next(nextValue);

      if (result.done) {
        return Promise.resolve(result.value);
      }

      return Promise.resolve(result.value)
        .then(value => step(value))
        .catch(error => step(error, true));
    };

    return step();
  };
}

使用场景

这种实现方式适用于需要在没有原生 async/await 支持的环境(如旧版浏览器或特定运行时)中模拟异步流程控制。现代 JavaScript 引擎已原生支持 async/await,推荐直接使用原生语法。

标签: jsasync
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

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

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…