异步编程
概述
异步编程是指程序在执行某些耗时操作(如网络请求、文件读取)时,不会阻塞后续代码的执行,而是让这些操作在后台运行,完成后通过回调函数通知结果。
为什么需要异步?
- 避免阻塞主线程,保持用户界面响应
- 提高程序执行效率
- 处理I/O密集型任务(网络请求、文件操作等)
主要异步模式
回调函数是指被当作参数传入另一个函数、不立即执行,需等待特定条件触发或任务完成后才被调用执行的函数,主要用于处理异步操作、事件响应及后续逻辑编排。
Promise是JavaScript用于解决异步回调嵌套地狱的对象,专门封装异步操作状态,拥有pending进行中、fulfilled成功、rejected失败三种状态,状态一旦改变就无法篡改;通过.then()接收成功结果、.catch()捕获错误、.finally()统一收尾,支持链式调用,让异步代码结构清晰、可读性更强,替代传统多层回调函数。
async/await是基于Promise的语法糖,async用来修饰函数使其默认返回Promise对象,await可暂停异步代码执行,等待Promise状态完成后再获取结果,能把链式异步代码改写成同步写法,简化嵌套、提升可读性,方便统一处理异步逻辑与异常捕获。
常用异步函数
// setTimeout/setInterval
setTimeout(() => console.log('执行'), 1000);
// Promise 相关
Promise.all([promise1, promise2]) // 并行执行
Promise.race([promise1, promise2]) // 竞速执行
// 现代异步 API
fetch('/api/data'); // 网络请求
navigator.geolocation.getCurrentPosition(); // 获取位置
最佳实践
- 优先使用 async/await 使代码更易读
- 始终处理 Promise 的错误情况
- 避免回调地狱,使用 Promise 或 async/await
- 注意并发控制,避免过多并行请求
异步编程是 JavaScript 的核心概念,掌握它能让你更好地处理复杂的应用逻辑。