温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ecmascript怎样处理异步操作

发布时间:2026-08-31 20:33:50 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 ECMAScript(JavaScript) 中,处理异步操作主要有以下几种方式,按发展顺序和推荐程度如下:


1. 回调函数(Callback)

最原始的方式。

function fetchData(callback) {
  setTimeout(() => {
    callback("数据");
  }, 1000);
}

fetchData((data) => {
  console.log(data);
});

问题:容易形成“回调地狱”(Callback Hell)

a(() => {
  b(() => {
    c(() => {
      // ...
    });
  });
});

2. Promise(ES6)

用于解决回调地狱。

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("数据");
    }, 1000);
  });
}

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

Promise 链式调用

fetchData()
  .then(a)
  .then(b)
  .then(c)
  .catch(err => console.error(err));

3. async / await(ES2017,推荐)

基于 Promise,语法更像同步代码。

function fetchData() {
  return new Promise(resolve => {
    setTimeout(() => resolve("数据"), 1000);
  });
}

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

main();

✅ 优点

  • 代码清晰
  • 错误处理统一(try/catch)
  • 最推荐写法

4. 事件监听 / 发布订阅

适用于事件驱动场景(如 DOM、Node.js)。

button.addEventListener("click", () => {
  console.log("点击了");
});

5. 生成器 + Promise(早期方案)

async/await 出现前的过渡方案。

function* gen() {
  const data = yield fetchData();
  console.log(data);
}

现在基本不用了。


推荐总结

方式 推荐度 场景
async / await ⭐⭐⭐⭐⭐ 绝大多数异步
Promise ⭐⭐⭐⭐ 底层封装
回调 ⭐ 旧代码 / 简单场景
事件 ⭐⭐⭐ UI / 事件驱动

如果你愿意,我也可以:

  • 讲 Promise 原理
  • 对比 JS 单线程 & 事件循环
  • 给 真实项目示例(如接口请求)

你想深入哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手