将axios、async、Promise联系在一起讲一下
axios、async、Promise 关系一句话:
axios 返回 Promise,async/await 是基于 Promise 的语法糖,用来更优雅地处理 axios 异步请求。
🔄 三者关系链
axios (产生) → Promise (包装) → async/await (处理)
📝 代码演进对比
1. 原始 Promise
javascript
axios.get('/api/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
2. async/await 简化
javascript
async function fetchData() {
try {
const response = await axios.get('/api/data'); // axios返回Promise,await等待其完成
console.log(response.data);
} catch (error) {
console.error(error);
}
}
🎯 核心关系
- axios:基于 Promise 的 HTTP 客户端,所有请求都返回 Promise 对象
- Promise:异步操作的容器,提供 then/catch 处理方法
- async/await:让 Promise 异步代码写得像同步代码的语法糖
简单说:用 async/await 来优雅地处理 axios 返回的 Promise。
讲一下.then 与其关系
.then 是 Promise 的核心方法,与 async/await 是处理异步的两种不同风格。
🎯 关系定位
axios → Promise → .then() // 传统链式写法
→ async/await // 现代语法糖
📝 代码对比
1. .then() 链式调用
javascript
// Promise 链式写法
axios.get('/api/flight-records')
.then(response => {
console.log(response.data);
return processData(response.data);
})
.then(processedData => {
return saveToDatabase(processedData);
})
.then(result => {
console.log('保存成功', result);
})
.catch(error => {
console.error('请求失败', error);
});
2. async/await 同步风格
javascript
// async/await 写法
async function fetchAndProcess() {
try {
const response = await axios.get('/api/flight-records');
const processedData = await processData(response.data);
const result = await saveToDatabase(processedData);
console.log('保存成功', result);
} catch (error) {
console.error('请求失败', error);
}
}
🔄 等价关系
| .then() 写法 | async/await 写法 |
|---|---|
.then(value => {...}) |
const value = await promise |
.catch(error => {...}) |
try/catch |
.then().then() 链式 |
顺序的 await 语句 |
.finally() |
try/catch/finally |
💡 实际转换示例
javascript
// .then 版本
function loadFlightData(recordId) {
return axios.get(`/api/records/${recordId}`)
.then(response => response.data)
.then(record => {
return axios.get(`/api/pilots/${record.pilotId}`);
})
.then(pilotResponse => pilotResponse.data);
}
// async/await 版本
async function loadFlightData(recordId) {
const recordResponse = await axios.get(`/api/records/${recordId}`);
const record = recordResponse.data;
const pilotResponse = await axios.get(`/api/pilots/${record.pilotId}`);
return pilotResponse.data;
}
🏆 总结关系
.then:Promise 的原生处理方法,链式调用async/await:基于 Promise 的语法糖,让异步代码看起来像同步代码- 两者本质相同:都是处理 Promise 的不同语法风格
- async/await 更易读:特别是在处理多个依赖的异步操作时
简单说:.then 是 Promise 的"原生语言",async/await 是它的"翻译官",让代码更易懂。