async与await两种语法结合可以让异步代码像同步代码一样。
一、async函数
- async函数的返回值为promise对象。
- promise对象的结果由async函数执行的返回值决定。
1.函数体内返回的不是promise类型的对象,则函数返回的就是成功的promise。
async function func() {
//1.直接return
//return;
//2.return一个字符串
return 'hello';
}
console.log(func());

2.抛出错误,则函数返回的是一个失败的promise。
async function func() {
throw new Error('出错啦');
}
console.log(func());

3.函数体内返回一个promise,则函数返回的是一个promise(成功还是失败由函数体内的状态决定)。
async function func() {
return new Promise((resolve, reject) => {
resolve('成功的数据')
})
}
console.log(func());

二、await表达式
- await必须写在async函数中。
- await右侧的表达式一般为promise对象。
- await返回的是promise成功的值。
- await的promise失败了,就会抛出异常,需要通过try...catch捕获处理。
let func = () => {
return new Promise((resolve, reject) => {
resolve('成功的数据')
})
}
async function test() {
let ret = await func();
console.log(ret);
}
test();

网友评论