ES2017标准引入了async 函数,其实就是Generator函数的语法糖。
asyn函数的实现原理,就是将Generator函数和自动执行器包装在一个函数里。
一 基本用法
/**
* 延迟输出字符串。
*
* @param {number} num - 延迟时间(毫秒)。
* @param {string} str - 字符串。
*/
function delay(num, str) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(str);
}, num)
})
}
// 异步函数
async function getStrs() {
// 等待
const str1 = await delay(100, 'Hello');
// 等待
const str2 = await delay(200, 'World');
// 返回
return str1 + '-' + str2;
}
// 异步函数的返回值是Promise实例
getStrs().then(val => {
console.log(val);
})
二 捕获错误
async function hello() {
// await指令后面的Promise变为rejected状态
await new Promise(() => {
throw new Error('出错了');
});
}
// 使用catch语句捕获错误
hello().then(val => {
console.log('resolve', val);
}).catch(e => {
console.log('捕获错误', e);
});