博主:小猫娃来啦
文章核心:深入理解和使用 async和await
在 JS中,异步操作是无法避免的,而处理异步操作最常用的方法是使用回调函数或者 Promise
。然而,自 ES2017 引入了 async/await
之后,我们可以通过更简洁、可读性更好的方式来处理异步代码。本文将从浅层次到深层次,介绍 async/await
的理解和使用。
声明一个变量,用axios
请求后,把请求结果中的数据给这个变量。然后去使用这个变量,发现这个变量里是空的。但是当把这个这串代码放在定时器里几秒后,就能打印到。但如果网络不好,请求花的时间更多,那么你还是打印不到。你遇到过这个情况吗?如何拿到值呢?或者如何等到接口请求完,再去向下执行?
这边牵扯到一个同步和异步的问题,那么axios
是异步的非阻塞模式。如何将axios
请求由异步变为同步,这就需要async
与await
配合使用。
做到这一点,你才能保证必须让程序按照从上到下的顺序执行,你也就能拿到值了。
async function init() {
let salesData = [];
const res = await axios({
method: "post",
url: "要请求的接口",
data: {}
});
}
console.log(res.data.data);
salesData = res.data.data;
如果你着急解决问题,那么上面的代码示例就已经帮你解决了问题。如果你有时间,要深入了解,那么请往下看:
async/await
是基于 Promise
的一种语法糖,它提供了一种更优雅的方式来编写异步代码。通过使用 async
关键字声明一个异步函数,我们可以在其中使用 await
关键字等待 Promise
对象的解决(resolved
)或拒绝(rejected
),使得代码看起来更像是同步的方式进行编写和阅读。
async function fetchData() {
// 异步操作
}
async function fetchData() {
const result = await somePromise; // 等待 Promise 对象执行完毕
console.log(result); // 输出已解决的结果
}
await后面放axios也是可以的,原因无他。
仅因为axios
是一个基于 Promise
的 HTTP 客户端库,它提供了更丰富、更方便的功能来发送 Ajax 请求和处理响应。而 Promise
则是一种通用的处理异步操作的对象,可以在各种场景下使用,并通过链式调用的方式来处理异步操作的结果。
async function fetchData() {
try {
const result = await somePromise;
console.log(result);
} catch (error) {
console.error(error);
}
}
async function fetchData() {
throw new Error('请求失败');
}
async function fetchMultipleData() {
const promise1 = fetch(url1);
const promise2 = fetch(url2);
const [result1, result2] = await Promise.all([promise1, promise2]);
console.log(result1, result2);
}
async function doSomething() {
const result = await syncFunction(); // 等待一个同步函数执行完毕
console.log(result);
}
function syncFunction() {
const result = await asyncFunction(); // 等待一个异步函数执行完毕
console.log(result);
}
异步操作:无论是 Axios 还是 Promise,它们都用于处理异步操作。Axios 通过发送 HTTP 请求和处理响应来实现异步操作,而 Promise 是一种通用的处理异步操作的对象,可以在各种场景下使用。
基于 Promise:Axios 是基于 Promise 的,它返回的是一个 Promise 对象。Promise 提供了一种更优雅、可读性更好的方式来处理异步代码。
错误处理:无论是 Axios 还是 Promise,它们都提供了错误处理的机制。Axios 可以捕获请求错误和响应错误,并将错误信息封装成一个统一的错误对象返回。Promise 通过 reject 状态来表示异步操作失败,并能够使用 .catch() 方法来捕获并处理错误。
当我们遇到需要代码加载顺序必须同步时,也就是执行顺序必须由上而下,等中间代码执行完毕才能向下执行时。
我们需要用async和await
来介入,他们的配合使用,可以使异步变为同步,多用于改变接口请求等异步操作。