async/await的应用场景

2022-08-19 02:23:48 浏览数 (1)

个人理解,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' }

0 人点赞