一、同步异步的理解
同步:同步就是在后一个任务等待前一个任务执行完毕后,再执行,执行顺序和任务的排列顺序一致。 同步案例: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()