当前位置:首页 > JavaScript

js原生实现异步

2026-02-02 22:11:21JavaScript

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

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

回调函数(Callback)

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

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引入的语法糖,使异步代码看起来像同步代码。

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函数可以实现更复杂的异步流程控制。

js原生实现异步

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实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

jquery js

jquery js

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

js实现选题

js实现选题

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

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…