同异步async和await的个人理解
同异步中async和await的个人使用理解
什么是同异步
同步
因为JavaScript的单线程,因此同个时间只能处理同个任务,所有任务都需要排队,前一个任务执行完,才能继续执行下一个任务。比如网页渲染就是一个同步任务
异步
异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程
,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务
Async/await:是一个用同步思维解决异步问题的方案
async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。
await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待。
await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;
如果不是Promise对象:把这个非promise的东西当做await表达式的结果。
我之前在学习的时候一直以为await是让其他先执行 await后面跟的函数再执行导致我的理解十分错误,后来自己代码过程中才改变自己的这个认知,真实菜鸡了。。
上代码
// 使用async/await获取成功的结果
// 定义一个异步函数,3秒后才能获取到值(类似操作数据库)
function getSomeThing(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('获取成功')
},3000)
})
}
function test(){
let a = getSomeThing();
console.log(a)
}
test();
这样的输出是直接一个promise,不会在3秒后出现获取成功 因为打印a和执行getSomeThing()函数是一起的 还没到获取的a时候就已经打印了a。所以会无法输出。
但是这样写就会在3秒后出现获取成功
// 使用async/await获取成功的结果
// 定义一个异步函数,3秒后才能获取到值(类似操作数据库)
function getSomeThing(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('获取成功')
},3000)
})
}
async function test(){
let a = await getSomeThing();
console.log(a)
}
test(); // 3秒后输出:获取成功
await的意思在我看来就是 后面的你先等等 我出结果了你再运行。
实际项目代码
async mounted() {
const res = await GETList()
console.log(res, 'see')
if (res.list.length) {
this.getAllData()
}
},
如果没有await,length就会报错无法获取。等第一个请求发送获取到了res.list后再执行if判断length长度 获取其他数据。
适用于执行函数多个,需要上一个函数执行获取再传递给下一个函数运行。同步思想使用异步
更多推荐
所有评论(0)