Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:javascript:异步

JS 异步


// 本代码由 AI 生成
 
/************************************************
 * 模拟一个异步函数,比如:通过网络请求获取数据
 * ----------------------------------------------
 * - 返回 Promise:在这里,使用 setTimeout
 *   来模拟 1 秒后返回结果
 * - 如果操作成功,调用 resolve;若失败,则调用 reject
 ************************************************/
function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // 模拟一个布尔值来决定成功或失败
      const success = true; 
 
      if (success) {
        // 成功时,通过 resolve 返回结果
        resolve("数据获取成功 —— 来自 fetchData()");
      } else {
        // 失败时,通过 reject 抛出错误信息
        reject("数据获取失败 —— 来自 fetchData()");
      }
    }, 1000);
  });
}
 
/************************************************
 * 方式一:使用 Promise 的 then / catch
 * ----------------------------------------------
 * - then(): 用来接收异步操作成功时返回的结果
 * - catch(): 用来接收异步操作中的错误信息
 ************************************************/
fetchData()
  .then((data) => {
    console.log("[Promise] then:", data);
  })
  .catch((error) => {
    console.error("[Promise] catch:", error);
  });
 
/************************************************
 * 方式二:使用 async / await
 * ----------------------------------------------
 * - async: 用于声明异步函数,该函数返回一个 Promise
 * - await: 用于等待一个返回 Promise 的函数执行完毕,并
 *          将其返回值赋给一个变量,就像同步代码写法
 * - try...catch: 用来捕获异步函数内部可能出现的错误
 ************************************************/
async function handleData() {
  try {
    // await 等待 fetchData() 返回并获取其返回值
    const result = await fetchData();
    console.log("[Async/Await] result:", result);
  } catch (error) {
    // 如果 fetchData() 内部调用 reject,则会进入到这里
    console.error("[Async/Await] error:", error);
  }
}
 
// 调用使用 async/await 写法的函数
handleData();
/var/www/DokuWikiStick/dokuwiki/data/pages/程序/javascript/异步.txt · Last modified: 2025/03/04 09:59 by zhonghui