当前位置:首页 > JavaScript

js怎么实现异步

2026-02-28 20:37:14JavaScript

异步实现的常见方法

JavaScript 中实现异步操作的核心目的是避免阻塞主线程,同时处理耗时任务(如网络请求、文件读写等)。以下是几种主流实现方式:

回调函数(Callback)

通过将函数作为参数传递,在异步任务完成后触发回调。这是最基础的异步模式,但容易导致“回调地狱”。

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

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

Promise 对象

Promise 提供了更清晰的链式调用语法,解决回调嵌套问题。它有三种状态:pendingfulfilledrejected

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));

async/await

基于 Promise 的语法糖,用同步写法实现异步逻辑,代码更易读。

async function getData() {
  try {
    const data = await fetchData(); // 等待 Promise 解决
    console.log(data); // 输出: Data received
  } catch (error) {
    console.error(error);
  }
}
getData();

事件监听(EventEmitter)

通过事件驱动模型实现异步,常见于 Node.js 的 EventEmitter 模块。

const EventEmitter = require('events');
const emitter = new EventEmitter();

emitter.on('data', (data) => {
  console.log(data); // 输出: Data received
});

setTimeout(() => {
  emitter.emit('data', 'Data received');
}, 1000);

Web Workers

在浏览器中通过多线程实现异步,适合 CPU 密集型任务。

// main.js
const worker = new Worker('worker.js');
worker.postMessage('Start');
worker.onmessage = (e) => {
  console.log(e.data); // 输出: Work done
};

// worker.js
self.onmessage = (e) => {
  setTimeout(() => {
    self.postMessage('Work done');
  }, 1000);
};

生成器函数(Generators)

通过 function*yield 暂停函数执行,配合 Promise 实现异步流程控制。

js怎么实现异步

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

const generator = fetchData();
generator.next().value.then(data => generator.next(data));

选择建议

  • 简单场景:回调或 Promise。
  • 复杂异步链:优先使用 async/await
  • 高性能计算:考虑 Web Workers。
  • 事件驱动:使用 EventEmitter 模式。

标签: js
分享给朋友:

相关文章

js实现动画

js实现动画

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

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现复制功能

js实现复制功能

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

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…