一、同步异步的理解
同步:同步就是在后一个任务等待前一个任务执行完毕后,再执行,执行顺序和任务的排列顺序一致。 同步案例:for循环
比如:
for(var i=0;i<5;i++){
console.log(i)
}
console.log("hello")
就会先执行完for循环,在执行console.log
异步:异步是非阻塞的,不用等到现在的任务执行完,就可以执行后面的内容。 异步案例:ajax,setTimeout
console.log(a)
setTimeout(()=>{
console.log("我来了")
},3000)
console.log(b)
执行顺序为a,b,"我来了"
二、async/await是什么
async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。async 函数返回的是一个 Promise 对象
- 典型的异步函数的调用
$.get('/',function(data){console.log(data.length)})
还有setTimeout,promise等
Async/Await的语法:
用来处理异步的,是(Generator函数)的改进,原理也是promise。
asny function fn(){
var res = await fn()//等待fn执行完才会执行后面的代码
console.log("123"),await会阻塞掉后面的代码
}
Generator:生成器,可以将异步回调代码变成“同步”代码
三、 async函数总是会返回一个promise,返回一个promise有三种情形:
1)async函数中显示的return一个promise:
2)如果return的是一个具体值,则会转换为一个resolve为该值的promise;
3)其它则会转换为一个resolve为undefined的promise。
四、 await 的缺点:
await只能放在async函数里
await拿到的是resolve的数据或者说传给then的数据,reject(失败)的需要靠try,catch的方法。
五、为什么要使用await
为了使我们的异步代码,更像同步的代码
await是直接获取多个promise的结果的,可以直接await Promise.all()