当我们遇到异步函数的时候,会先执行后续代码,等异步执行完毕才能拿到异步返回的值,而有的时候我们需要同步拿到异步返回的值之后再去执行后续操作
下面就是一个异步代码的执行,返回顺序从后往前
function resolveAfter2Seconds(){
setTimeout(() => {
console.log('成功');
}, 100);
console.log("你好")
}
resolveAfter2Seconds() // 先打印"你好",再打印"成功"
需要同步拿到异步函数的返回值,首先利用promise先去定义异步函数,返回成功/错误值,然后调用promise函数接收值,以下是两种写法
第一种, 直接调用函数,然后.then拿值,执行后续操作
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('成功');
}, 2000);
});
}
resolveAfter2Seconds().then((r)=>{
console.log(r)
console.log("你好") //先输出‘成功’,在输出‘你好’
//执行拿到异步返回的值之后的操作...
})
第二种,利用async重新定义一个函数,在里面利用await接收promise函数的返回值,然后进行后续操作
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('成功');
}, 2000);
});
}
async function asyncCall() {
const result = await resolveAfter2Seconds();
console.log(result);
console.log('你好'); //先输出‘成功’,在输出‘你好’
//执行拿到异步返回的值之后的操作...
}
asyncCall();