软件工程日报17

在 JavaScript 里,async 和 await 是为简化异步编程而设计的特性,它们主要用于处理 Promise 对象,让异步代码在书写和阅读时更像同步代码。
async 关键字的作用
定义异步函数:async 关键字用于定义一个异步函数。异步函数在执行时会返回一个 Promise 对象,无论函数内部是否显式返回 Promise。
返回 Promise 对象:当异步函数执行完毕时,其返回值会被包装成一个已解决(resolved)的 Promise;若函数内部抛出错误,返回的 Promise 则会被拒(rejected)。

async function asyncFunction() {
    return 'Hello, World!';
}

asyncFunction().then(result => {
    console.log(result); 
});

在这个例子中,asyncFunction 是一个异步函数,它返回的字符串会被包装成一个已解决的 Promise,接着通过 then 方法获取返回值。
await 关键字的作用
暂停异步函数执行:await 只能在 async 函数内部使用,它会暂停当前 async 函数的执行,直到等待的 Promise 对象被解决或拒绝。
简化 Promise 处理:使用 await 可以避免使用 .then() 和 .catch() 链式调用,使代码更易读。
获取 Promise 结果:await 表达式会返回 Promise 被解决的值,若 Promise 被拒绝,await 会抛出错误,可使用 try...catch 语句捕获。

function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function asyncExample() {
    console.log('开始执行');
    await delay(2000); 
    console.log('等待 2 秒后继续执行');
    return '完成';
}

asyncExample().then(result => {
    console.log(result);
});

在上述代码中,asyncExample 是一个异步函数,await delay(2000) 会暂停函数执行 2 秒,2 秒后才会继续执行后续代码。
结合使用 async 和 await 处理多个 Promise
async 和 await 结合使用能更方便地处理多个 Promise,避免回调地狱。

function fetchData1() {
    return new Promise(resolve => setTimeout(() => resolve('数据 1'), 1000));
}

function fetchData2() {
    return new Promise(resolve => setTimeout(() => resolve('数据 2'), 1500));
}

async function getData() {
    try {
        const data1 = await fetchData1();
        console.log(data1);
        const data2 = await fetchData2();
        console.log(data2);
        return [data1, data2];
    } catch (error) {
        console.error('发生错误:', error);
    }
}

getData().then(results => {
    console.log('最终结果:', results);
});

posted @ 2025-03-26 18:15  Look_Back  阅读(56)  评论(0)    收藏  举报