es6 异步 之async await 学习总结
程序员文章站
2023-12-21 22:35:28
...
async 和 await 是 ES2016/ es7 新增的两个关键字, 它们借鉴了 ES2015 中生成器在实际开发中的应用。
目的是为了简化Promise api 的使用, 并非替代 Promise
async:目的是为了简化在函数的返回值中对Promise的创建
例如:
async function test() {
console.log(1);
return 2; // resolve
// throw reject
}
// 等效于
function test() {
return new Promise((resolve, reject) => {
console.log(1);
resolve(2);
})
}
await: 关键字必须出现在async函数中
await 等待的是thenable里面成功的状态
async function test() {
const result = await 1;
console.log(result);
}
// 等效于
function test() {
return new Promise((resolve, reject) => {
Promise.resolve(1).then(data => {
const result = data;
console.log(result)
resolve();
})
})
}
上面的那种方法处理的是promise的正常状态,如何处理错误状态呢?
function getRandom() {
if (Math.getRandom < 0.5) {
return 1;
} else {
throw 2;
}
}
async function test() {
try {
const result = await getRandom();
console.log("正常状态", result);
} catch{
console.log("错误状态",err)
}
}
/**
* @description: 使用promise 改造 计时器
* @param :
* @return:
*/
function delay(duration) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, duration);
})
}