当前位置:首页 > JavaScript

js原生实现异步

2026-03-15 22:35:59JavaScript

原生JavaScript实现异步的方法

回调函数(Callback)

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

function fetchData(callback) {
    setTimeout(() => {
        const data = 'Async data';
        callback(data);
    }, 1000);
}

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

Promise

Promise是ES6引入的异步解决方案,提供了更清晰的链式调用和错误处理机制。

function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const data = 'Async data';
            resolve(data);
        }, 1000);
    });
}

fetchData()
    .then(data => console.log(data)) // 输出: Async data
    .catch(error => console.error(error));

async/await

async/await是ES7引入的语法糖,基于Promise实现,使异步代码看起来像同步代码。

function fetchData() {
    return new Promise((resolve) => {
        setTimeout(() => {
            const data = 'Async data';
            resolve(data);
        }, 1000);
    });
}

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

getData();

事件监听(EventEmitter)

通过自定义事件监听机制实现异步,适合需要多次触发异步操作的场景。

class EventEmitter {
    constructor() {
        this.events = {};
    }

    on(event, listener) {
        if (!this.events[event]) {
            this.events[event] = [];
        }
        this.events[event].push(listener);
    }

    emit(event, ...args) {
        if (this.events[event]) {
            this.events[event].forEach(listener => listener(...args));
        }
    }
}

const emitter = new EventEmitter();
emitter.on('data', (data) => console.log(data)); // 输出: Async data
setTimeout(() => emitter.emit('data', 'Async data'), 1000);

Generator函数

Generator函数是ES6引入的另一种异步解决方案,通过yield暂停函数执行。

js原生实现异步

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

const generator = fetchData();
generator.next().value.then(data => console.log(data)); // 输出: Async data

选择建议

  • 简单异步任务可使用回调函数或Promise。
  • 复杂异步逻辑推荐使用async/await,代码更易读。
  • 需要事件驱动的场景适合事件监听机制。
  • Generator函数通常与库(如co)配合使用,原生场景较少直接使用。

标签: js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…