回调函数(Callback)www.jljyoa.comAAA

回调函数是异步编程的基础模式,将函数作为参数传递给另一个函数,在异步操作完成后执行。典型例子是 setTimeout 或文件读取操作。m.jljyoa.comAAA

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

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

回调的缺点是嵌套过多会导致“回调地狱”(Callback Hell),代码可读性差。healthfate.comAAA


Promise  www.healthfate.comAAA

Promise 是 ES6 引入的异步解决方案,通过链式调用解决回调嵌套问题。状态分为 pendingfulfilledrejectedm.healthfate.comAAA

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

Promise 提供 Promise.allPromise.race 等工具方法处理多个异步操作。shoupin-med.comAAA


async/await  www.shoupin-med.comAAA

ES2017 的 async/await 是 Promise 的语法糖,以同步方式编写异步代码。async 标记函数返回 Promise,await 暂停执行直到 Promise 完成。m.shoupin-med.comAAA

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

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

main();

async/await 的优势是代码更简洁,错误处理可通过 try/catch 实现。zh-tek.comAAA


错误处理对比www.zh-tek.comAAA

  • 回调:通过参数传递错误(Node.js 风格)。
    fs.readFile('file.txt', (err, data) => {
      if (err) throw err;
      console.log(data);
    });
    

  • Promise:使用 .catch() 或链式捕获。
    fetchData().catch((error) => console.error(error));
    

  • async/await:直接使用 try/catch
    try {
      await fetchData();
    } catch (error) {
      console.error(error);
    }
    


性能优化技巧m.zh-tek.comAAA

  • 避免不必要的 await 阻塞,可并行执行独立任务:
    const [user, posts] = await Promise.all([
      fetchUser(),
      fetchPosts()
    ]);
    

  • 使用 Promise.race 设置超时限制:
    const timeout = new Promise((_, reject) => {
      setTimeout(() => reject(new Error('Timeout')), 5000);
    });
    
    await Promise.race([fetchData(), timeout]);
    


总结www.bj-lanhao.comAAA

  • 回调:简单但易产生嵌套问题,适合简单场景。m.bj-lanhao.comAAA
  • Promise:链式调用改善可读性,适合复杂异步流程。sz-qiaodan.comAAA
  • async/await:同步风格编写异步代码,推荐现代项目使用。www.sz-qiaodan.comAAA
  • m.sz-qiaodan.comAAA  bolilai1388.comAAA  www.bolil021sys.comAAA  ai1388.comAAA  m.bolilai1388.comAAA  www.021sys.comAAA  m.021sys.comAAA  afymt.comAAA  cdganggan.comAAA  xmppfair.comAAA  sjgzz.comAAA  slzizheng.comAAA
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐