当前位置:首页 > JavaScript

js原生实现异步

2026-04-07 15:59:54JavaScript

原生 JavaScript 实现异步的方法

回调函数(Callback)

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

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

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

Promise

Promise 是 ES6 引入的异步解决方案,比回调函数更易于管理和避免回调地狱。

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

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

async/await

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

js原生实现异步

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

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

main();

事件监听(Event Listeners)

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

document.getElementById('button').addEventListener('click', () => {
  console.log('Button clicked');
});

setTimeout 和 setInterval

setTimeoutsetInterval 是 JavaScript 内置的定时器函数,用于延迟执行或周期性执行代码。

js原生实现异步

setTimeout(() => {
  console.log('Executed after 1 second');
}, 1000);

setInterval(() => {
  console.log('Executed every 1 second');
}, 1000);

XMLHttpRequest

XMLHttpRequest 是早期的 AJAX 实现方式,用于与服务器交互。

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onload = function() {
  if (xhr.status === 200) {
    console.log(xhr.responseText);
  }
};
xhr.send();

Fetch API

Fetch API 是现代浏览器提供的更简洁的 AJAX 实现方式,基于 Promise。

fetch('https://api.example.com/data')
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

Web Workers

Web Workers 允许在后台线程中运行脚本,避免阻塞主线程。

const worker = new Worker('worker.js');
worker.onmessage = (event) => {
  console.log('Message from worker:', event.data);
};
worker.postMessage('Start working');

总结

JavaScript 提供了多种原生异步编程方式,从早期的回调函数到现代的 async/await,开发者可以根据需求选择合适的方法。回调函数简单但易导致回调地狱,Promise 和 async/await 更易于管理,而 Fetch API 和 Web Workers 则适用于特定场景。

标签: js
分享给朋友:

相关文章

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

链表实现js

链表实现js

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

js实现vue路由

js实现vue路由

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