async/await可以理解为对promise使用方法的补充。
await
先上代码
function pm (){
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('aa')
// reject('err')
}, 1000)
})
}
let a = await pm();
此时这个变量a就等于‘aa'。
需要注意的是,a并不是一个promise对象,而是resolve里传的参数。也就是成功回调的参数。
但是直接这么写会报错。它的语法是
async function test(){
let a = await pm();
console.log(a);
let b = await 'bb';
return a + b;
}
await 必须在一个async(异步)函数里才能使用。
到现在我们可以总结出一点,await的作用就是等待一个promise状态改变后才执行下一行。但是如果await不是一个promise,就直接返回。
所以,
test().then(val => {console.log(val)})
的结果是 ’aabb‘。
但是如果await的这个promise reject一个错误。那么就会报错。我理解为await仅仅是在等待resolve。如果resolve不来,它就报错。
async
刚才写道test().then(val => {console.log(val)})的结果是’aabb',为什么是test().then(val => {console.log(val)}),而不是console.log(test())?
这是因为async自动将常规函数转换成Promise,返回值也是一个Promise对象。
至此,我也稍微明白了async/await。以后有其他疑问再继续总结把。