async
是 ES7
中用于修饰函数,被修饰的函数返回一个Promise
对象。
async function test() {
return 123;
}
const pro = test();
console.log(pro);
// Promise {<resolved>: 123}
可以说async
的出现是为了简化Promise
的书写
function test() {
return new Promise((resolve, reject) => {
resolve(123)
})
}
const pro = test();
console.log(pro);
// Promise {<resolved>: 123}
await
操作符用于等待一个 Promise
对象, 它只能在异步函数 async function
内部使用。
async function test1() {
return 123;
}
async function test2() {
const result = await test1();
console.log(result)
}
test2()
// 123
await
也可以用来简化 then
函数
function test1() {
return new Promise((resolve, reject) => {
resolve(123)
})
}
function test2() {
return new Promise((resolve, reject) => {
test1().then(result => {
console.log(result);
resolve()
})
})
}
test2()
// 123
*如果await
后面不是一个promise
对象,则会对包装一个promise继续按照规则执行
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()
})
})
}
如果async
中有错误的时候,可以使用try...catch...
去捕获async
中的错误
async function getPromise() {
if (Math.random() < 0.5) {
return 1;
} else {
throw 2;
}
}
async function test() {
try {
const result = await getPromise();
console.log("正常",result)
} catch(err) {
console.log("错误",err);
}
// 等同于 ↓↓↓
getPromise().then(data => {
const result = data;
console.log("正常", result)
}, err => {
console.log("错误", err);
})
}
test()