aysnc await promise
async用于声明一个函数是异步的,await可以认为是 aysnc wait 的简写,等待一个异步方法执行完成;
当调用一个async函数时,会返回一个promise对象;
await只能出现在asyna中,否则会报错;async函数中可能会有await表达式,await会使async函数暂停执行,直到表达式中的Promise解析完成后继续执行async中await后面的代码并返回解决结果;
async/await其实就是一个语法糖,它是基于promise实现的,async函数其实是对promise做了一个封装,await返回值是一个promise对象,它只是把await后面的代码放在了promise.then()中执行,也就是await相当于promise.then();
async function test1() {
return 1
}
async function test2() {
return Promise.resolve(2)
}
const res1 = test1()
const res2 = test2()
console.log(res1)
console.log(res2)
async function test3() {
const p3 = Promise.resolve(3)
p3.then(data3 => {
console.log('data3', data3)
})
const data3 = await p3
console.log('data3', data3)
}
test3()
当执行一个async函数时,返回的是一个promise对象,也就是在函数内部,如果返回的是一个普通值的话,它会帮助封装成一个promise对象,如果直接返回的是promise对象,那它就会直接返回这个promise对象;
promise.catch()相当于try…catch
async function test6() {
const p6 = Promise.reject(6)
try {
const data6 = await p6
console.log('data6', data6)
} catch (e) {
console.error('e', e)
}
}
test6()
async await promise的执行顺序
async function async1() {
console.log('async1 start');
await async2();
console.log('asnyc1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(() => {
console.log('setTimeOut');
}, 0);
async1();
new Promise(function (reslove) {
console.log('promise1');
reslove();
}).then(function () {
console.log('promise2');
})
console.log('script end');
输出顺序:
script start
async1 start
async2
promise1
script end
asnyc1 end
promise2
setTimeOut