个人理解,async/await的应用场景主要是为了解决异步多层回调嵌套的问题,举例如下:
例子 1:在第一个函数执行完之后,延迟固定秒数执行
代码语言:javascript复制function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`sleep ${time}s`);
resolve(time);
}, time);
});
}
// 目标:等待几秒后再执行下一个log,下一个log依赖上一个sleep返回的值
// 解决办法:1. promise.then 2. async/await
console.log("start");
// 1. promose.then
sleep(1000).then((res1) => {
console.log(res1 "log1"); // 1秒后打印 1000log1
sleep(2000).then((res2) => {
console.log(res2 "log2"); // 2秒后打印 1000log1
});
// 多层回调,如果每个异步函数都依赖上个异步函数返回的结果,且有多个,写起来将层层嵌套
});
// 2. async/await
async function run() {
const a = await sleep(1000);
console.log(a "log1"); // 1秒后打印 1000log1
const b = await sleep(2000);
console.log(b "log2"); // 2秒后打印 1000log1
}
run();
例子 2:第二个函数执行依赖第一个函数返回的结果
代码语言:javascript复制function getData1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ id: 1 });
}, 3000);
});
}
function getData2(id) {
return new Promise((resolve, reject) => {
resolve({ id: id, name: "a" });
});
}
getData1().then((res) => {
console.log("getData1 res", res); // 3秒后输出:getData1 res { id: 1 }
getData2(res.id).then((res) => {
console.log("getData2", res); // getData2 { id: 1, name: 'a' }
});
});
async function getData() {
let res1 = await getData1();
let res2 = await getData2(res1.id);
console.log("getData2 res", res2);
}
getData(); // getData2 res { id: 1, name: 'a' }