async函数在使用上很简单,我们来看一下下面的例子
async function add(a,b){ return a+b } add(1,2).then((res) =>{ consoel.log(res); //3 })
在上面的例子中我们可以看到。async返回的是一个 prominse对象。可以想prominse一样使用。then的方法
还有一个特性,在async里有await 这个关键字。他是专属async的方法如果在函数外就会报错
在函数运行中遇到await会先把异步回调执行完成再去执行下面的内容。看下面这个例子
function wa(){ return new Promise((resolve, reject) => { console.log('你'); setTimeout(function(){ resolve('回来了'); }) }); } async function aw(){ await wa().then(res => console.log(res)) console.log('欢迎回家'); } aw().then(res=>{ console.log('咳咳'); })
它运行出来的结果就是
你
回来了
欢迎回家
咳咳
这样我们就可以很好的控制异步回调的内容。看下面的例子
function fun1(){ return new Promise((resolve,reject) =>{ setTimeout(function(){ resolve('1'); },3000) }) } function fun2(){ return new Promise((resolve,reject) => { setTimeout(function(){ resolve('2'); },2000) }) } async function all(){ await fun1().then((res) =>{console.log(res)}); await fun2().then((res) =>{console.log(res)}); return '执行完成了' } all().then((res) =>{ console.log(res); }) //1 //2 //执行完成了
上面的代码我们想让在fun1执行完成以后再去执行fun2就可以使用这样的方法,这样要比嵌套的写法好进行维护。
这也是解决回调地狱的方法之一。