async起什么作用?
- async函数返回的是一个Promise对象。Async函数(包含函数语句、函数表达式、Lambda表达式)会返回一个Promise对象,如果在函数中return一个直接量,async会把这个直接量通过Promise.resolve()封装成Promise对象。
- async函数返回的是一个Promise对象,所以在最外层不能用await获取其返回值的情况下,我们当然应该用原来的方式:then()链来处理这个Promise对象。
- 如果async函数没有返回值,又该如何? 没有返回值就是undefined
总结:async函数 在没有await的情况下执行async函数,它会立即执行,并且返回一个promise对象,并且绝不会阻塞后面的语句。
await是什么?
await表达式会暂停当前async function的执行,等待Promise处理完成若Promise正常处理,其处理结果作为await表达式的值,继续执行async function。若Promise处理异常(rejected),await表达式会把Promise的异常原因抛出。另外,如果await操作符号的表达式的值不是一个Promise,那么该值将被转换为一个正常处理的Promise。
async/await的优势
单一的Promise链并不能发现async/await的优势,需要处理由多个Promise组成的then链的时候,当你使用传统Promise时多个依赖性请求会在then之后多层嵌套,导致难以阅读于维护,async/await能将其转换的更加便于阅读与维护
//不使用async/await
test(){
aa().then((data1)=>{
bb().then((data2)=>{
cc().then((data3)=>{
})
})
})
}
//使用async/await
async test(){
const {data1} = await aa()
const {data2} = await bb()
const {data3} = await cc()
}复制代码
如何让小程序支持async/await
1、下载regenerator库
npm install regenerator
//mac用户
sudo npm install regenerator
复制代码
在node_modules文件中的regenerator-runtime文件夹拿出来runtime.js,放到小程序代码中去,一般是放在utils文件夹。
2、在需要使用async/await的 js 文件顶部引入regenerator库:
const regeneratorRuntime = require('../../utils/runtime')
复制代码