软件工程日报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);
});

浙公网安备 33010602011771号