关于await和async

async的意思是异步
await的字面意思是等一下

还是比较形象的,通常来说,作为ES7的语法标准,async一般修饰一个函数,说明这个函数是异步的。await一般是用来执行异步操作的,很多情况下它的后面会跟着Promise对象

async和await提出的意义在于:用同步的方式处理异步!!

定时器是最常见的异步操作,先用它定义一个异步函数。

function sleep(){
    setTimeout(()=>{
        return 1
    },3000)
}

因为await后面跟着的是一个Promise对象。就把它封装一下:

let sleep = () => {
    return new Promise((resolve,reject)=>{
        setTimeout(() => {
            resolve(2);
        },3000)
    })
}
async function aaa() {
    let i = await sleep()
    console.log(i);
}
aaa();

最终这样使用出来,3秒之后打印出2。但是如果sleep不用Promise封装,打印的就是undefined。

await可以异步执行一个函数。通常用于执行一个回调函数,await next();

需要注意的地方:除了await后面跟一个Promise,await必须在async定义的函数中使用。

关于async和await的详细说明:

1、无论函数中是否是异步的,async定义的函数的返回值都是promise。

async function getName() {
    return 'mapbar_front';
}
console.log(getName());//resolved Promise

上面的这个函数,返回值是一个被注入的Promise对象,注入的值是 ‘mapbar_front’ 这样的一个字符串。

当然,如果上面的函数没有返回值,它的执行结果依然是Promise对象,而且被注入的值是undefined。

2、await可以取得的值是Promise注入的值,而不是Promise。

async function getName() {
    return 'mapbar_front';
}
console.log(getName());//resolved Promise
async function doIt() {
    const data = await getName();
    console.log(data);//mapbar_front
}
doIt();

3、解决了什么问题?

回调函数是前端的一大弊病。

Promise解决了回调函数的层层嵌套的痛楚。

而async和await是基于Promise的语法糖,从使用上来说,更加的清晰简洁。

4、关于async和await的弊病是什么?

弊病一:async语法是ES7的标准,所以会存在兼容性问题。需要使用babel的解析。

弊病二:await必须配合async使用,但是我们想做到,把await得到的值,return出去,这个需求就做不到,一般return出去的值是一个pedding Promise对象。

function step() {
   return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve(1234)
        },1000)
    })
}
async function doIt() {
    const result = await step();
    console.log(result);//1234
    return result
}
doIt();//打印出1234
console.log(doIt());//Promise对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值