JavaScript的代码一般都是同步执行的,但是在一些情况下是异步执行的,在需要耗费时间的代码上他会持续等待,完成之后再继续往下执行,异步就是把代码放到另一个地方执行,执行完成后再把结果返回同步代码中,剩下的代码继续执行
setTimeout 把代码推迟执行
//一秒后执行 他会返回一个id,可以把id存储成一个变量 var timer=setTimeout(()=>{},1000) //停止setTimeout clearTimeout(timer)
setinterval 每隔一段时间执行一次
//每隔三秒钟执行一次 var interval=setInterval(()=>{},3000) clearInterval(interval)
promise
//promise是异步操作,可以把一些特别耗时间的操作交给promise,剩下的代码继续往下执行 //创建promise 里面接受回调参数,回调参数里面又接受俩个参数一个执行成功,一个执行失败 resolve 成功 reject 失败 let promise =new Promise((resolve,reject)=>{ //返回值 resolve('成功') //出错 reiect('抛出错误') }) promise可以使用then接受执行结果,是在promise执行完毕之后才会执行 promise.then(res=>{ console.log(res) }) //如果异步操作没有执行成功,则可以使用catch进行查看错误,捕获异常 promise.catch(err=>{ console.log(err) })
promise 细节
catch和then每次调用之后都是返回了一个行的promise对象,继续在他的基础上调用then和catch //链式用法 new Promise((resolve,reject)=>{ resolve(1) }).then(res=>{ return res+10; }).then((res)=>{ return new Promise(resolve=>resolve(res+20)) }).then(res=>{ console.log(value) }).catch(res=>{ console.log(res) }) //除了在每一个then后面写一个catch进行处理异常还可以写到最后进行统一处理
多个promise调用
promise.all可以让多个promise同时执行,返回一个整体大promise,在所有promise执行完之后返回一个结果数组,也是每个promise返回的值,返回的值是按照我们传给他的值一样的,而不是返回结果判断的顺序
var p1=new Promise(resolve=>{ resolve(1) }) var p2=new Promise(resolve=>{ resolve(2) }) var p3=new Promise(resolve=>{ resolve(3) }) Promise.all([p1,p2,p3]).then(res=>{ console.log(res) })
async/await
async/await是promise的语法糖,但不完全是promise的语法糖 使用async创建的函数相当于创建了一个promise 使用async和await的好处就是使用同步代码的方式执行异步的代码,比较直观 async as1(){ console.log(11) } 返回的是一个Promise await关键字必须在async里面调用,用await定义异步操作