JavaScript Promise与异步处理

22次阅读

promise是处理异步操作的核心机制,有pending、fulfilled和rejected三种状态,通过.then()、.catch()和.finally()链式调用;async/await语法使异步代码更简洁,配合try/catch统一处理错误;常用方法包括Promise.resolve、Promise.reject、Promise.all、Promise.race和Promise.allSettled,并发请求需注意错误捕获以避免静默失败。

JavaScript Promise与异步处理

javaScript中的异步处理是开发中不可或缺的一部分,尤其是在处理网络请求、文件读写或定时任务时。Promise 是 es6 引入的核心机制,用于更清晰地管理异步操作,避免“回调地狱”。

什么是 Promise

Promise 是一个表示异步操作最终完成或失败的对象。它有三种状态:

  • pending(等待):初始状态,既没有完成也没有拒绝
  • fulfilled(已成功):操作成功完成
  • rejected(已失败):操作失败

一旦状态从 pending 变为 fulfilled 或 rejected,就不会再改变。

const myPromise = new Promise((resolve, reject) => {
  if (/ 操作成功 /) {
    resolve(“成功结果”);
  } else {
    reject(“失败原因”);
  }
});

如何使用 Promise 处理异步操作

通过 .then() 和 .catch() 方法可以链式处理异步结果。

立即学习Java免费学习笔记(深入)”;

  • .then(value => {…}) 接收 resolve 的值
  • .catch(Error => {…}) 捕获 reject 或异常
  • .finally(() => {…}) 无论成功失败都会执行,适合清理操作

myPromise
  .then(result => console.log(result))
  .catch(error => console.error(error))
  .finally(() => console.log(“完成”));

Promise 链可以解决多层嵌套问题:

JavaScript Promise与异步处理

钉钉 AI 助理

钉钉AI助理汇集了钉钉AI产品能力,帮助企业迈入智能新时代。

JavaScript Promise与异步处理21

查看详情 JavaScript Promise与异步处理

fetchUserData()
  .then(userData => fetchUserPosts(userData.id))
  .then(posts => displayPosts(posts))
  .catch(err => console.error(“加载失败:”, err));

async/await:更简洁的异步语法

async 函数返回一个 Promise,内部可用 await 等待异步操作完成,代码看起来像同步但实际异步执行。

async function loadUserAndPosts() {
  try {
    const userData = await fetchUserData();
    const posts = await fetchUserPosts(userData.id);
    displayPosts(posts);
  } catch (error) {
    console.error(“出错啦:”, error);
  }
}

使用 async/await 后,错误统一用 try/catch 处理,逻辑更直观。

常见 Promise 方法

  • Promise.resolve(value):返回已成功的 Promise
  • Promise.reject(reason):返回已失败的 Promise
  • Promise.all([p1, p2, …]):全部成功才成功,任一失败则整体失败
  • Promise.race([p1, p2, …]):首个完成(无论成功失败)即决定结果
  • Promise.allSettled([p1, p2, …]):等待所有完成,不管成功或失败

例如,并行加载多个资源:

Promise.all([fetch(‘/api/user’), fetch(‘/api/config’)])
  .then(([userRes, configRes]) => {/* 处理响应 */})
  .catch(err => console.error(“其中一个请求失败”));

基本上就这些。掌握 Promise 和 async/await,能让异步代码更可读、易维护。不复杂但容易忽略细节,比如记得捕获错误,避免静默失败。

text=ZqhQzanResources