当前位置:首页 > JavaScript

js原生实现异步

2026-02-02 22:11:21JavaScript

原生JavaScript实现异步的几种方式

JavaScript原生支持多种异步编程方式,主要包括回调函数、Promise、async/await以及事件监听等。

回调函数(Callback)

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

js原生实现异步

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

fetchData((data) => {
    console.log(data); // 1秒后输出"Data received"
});

Promise

Promise是ES6引入的异步解决方案,提供了更清晰的链式调用方式。

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

fetchData()
    .then(data => console.log(data))
    .catch(error => console.error(error));

async/await

ES2017引入的语法糖,使异步代码看起来像同步代码。

js原生实现异步

async function getData() {
    try {
        const data = await fetchData();
        console.log(data);
    } catch (error) {
        console.error(error);
    }
}

getData();

事件监听

通过事件监听机制实现异步处理,常用于DOM事件或自定义事件。

const emitter = new EventTarget();

emitter.addEventListener('data', (e) => {
    console.log(e.detail);
});

setTimeout(() => {
    emitter.dispatchEvent(new CustomEvent('data', {
        detail: 'Data received'
    }));
}, 1000);

Generator函数

ES6引入的Generator函数可以实现更复杂的异步流程控制。

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

const gen = fetchData();
gen.next().value.then(data => console.log(data));

每种方式各有适用场景,现代JavaScript开发中推荐优先使用Promise配合async/await语法,能显著提高代码可读性和可维护性。

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…