当前位置:首页 > JavaScript

原生js异步实现

2026-04-07 13:09:14JavaScript

原生 JavaScript 异步实现方法

原生 JavaScript 提供了多种方式实现异步编程,以下是常见的几种方法:

回调函数(Callbacks)

回调函数是最基础的异步实现方式,将函数作为参数传递给另一个函数,在异步操作完成后调用。

function fetchData(callback) {
    setTimeout(() => {
        callback('Data received');
    }, 1000);
}

fetchData((data) => {
    console.log(data); // 输出: Data received
});

缺点:容易导致“回调地狱”(Callback Hell),代码难以维护。

Promise

Promise 是 ES6 引入的异步解决方案,通过链式调用避免回调嵌套。

function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('Data received');
        }, 1000);
    });
}

fetchData()
    .then((data) => {
        console.log(data); // 输出: Data received
    })
    .catch((error) => {
        console.error(error);
    });

特点

原生js异步实现

  • 支持链式调用(.then())。
  • 可以通过 .catch() 统一处理错误。

async/await

ES2017 引入的语法糖,基于 Promise,使异步代码更像同步代码。

async function fetchData() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve('Data received');
        }, 1000);
    });
}

async function main() {
    try {
        const data = await fetchData();
        console.log(data); // 输出: Data received
    } catch (error) {
        console.error(error);
    }
}

main();

优点

  • 代码更简洁,易于阅读。
  • 错误处理通过 try/catch 实现。

EventEmitter

通过事件监听机制实现异步,常用于浏览器事件或 Node.js 的 events 模块。

原生js异步实现

// 浏览器示例
document.addEventListener('click', () => {
    console.log('Clicked!');
});

适用场景:用户交互、自定义事件驱动逻辑。

Web Workers

用于在后台线程执行耗时任务,避免阻塞主线程。

// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage('Start task');
worker.onmessage = (e) => {
    console.log(e.data); // 接收 Worker 返回的结果
};

// worker.js
self.onmessage = (e) => {
    const result = e.data + ' processed';
    self.postMessage(result);
};

注意:Worker 线程无法直接操作 DOM。

总结

  • 简单异步任务:回调函数或 Promise。
  • 复杂异步逻辑:async/await。
  • 事件驱动场景:EventEmitter。
  • 高性能计算:Web Workers。

根据实际需求选择合适的方法,优先推荐 Promise 和 async/await。

标签: js
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现选题

js实现选题

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

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…