async await 和 Promis 用法

async 函数是和promise配合在一起使用的,意义在于让异步代码看起来和同步代码是一样的。

  async 函数返回的是一个 Promise 对象
  await只能放在async函数里

定义一个函数,三秒钟之后输出 3 ,输出完 3 之后,再过一秒输出 2 ,再过一秒输出 3

function printNum(time, num){
    return new Promise(reslove => {
        setTimeout(() => {
            console.log(num)
            reslove(); 
        },time)
    })
}
printNum(3000,3)
printNum(2000,2)
printNum(1000,1)
//执行结果 1,2,3
 即使将异步任务用promise容器包起来,但是他仍然是异步执行的从运行结果可以看出虽然先调用的是3 ,
 但是他却先执行的是1, 如果想让他依次执行我们可以借助 es6的.then()  还可以使用es7的 async 和 await
链式调用 .then()
function printNum(time, num) {
    return new Promise(reslove => {
        setTimeout(() => {
            reslove(num);
        }, time)
    })
}
printNum(3000,3).then(res=>{
    console.log(res)
    return printNum(2000,2)
}).then(res=>{
    console.log(res)
    return printNum(1000,1)
}).then(res=>{
    console.log(res)
})
这时候我们用 async 和 await 我们看一下结果
function printNum(time, num){
    return new Promise(reslove => {
        setTimeout(() => {
            console.log(num)
            reslove(); 
        },time)
    })
}
async function run(){
    await printNum(3000,3)//当此函数执行完,再调用下一个以 await 修饰的函数
    await printNum(2000,2)//当此函数执行完,再调用下一个以 await 修饰的函数
    await printNum(1000,1)//当此函数执行完,再调用下一个以 await 修饰的函数
}
run()
我们可以看到三秒钟之后输出 3,再过两秒输出 2,再过一秒输出 1 
其实是和promise的 then 方法是如出一辙的

async await还有一个作用就是 以 await 修饰的函数的返回值就是成功reslove()回调里面的数据

我们可以将代码修改为如下形式
function printNum(time, num){
    return new Promise(reslove => {
        setTimeout(() => {
            reslove(num); 
        },time)
    })
}
async function run(){
    // 一秒后打印1
    let num1 = await printNum(1000, 1);
    console.log(num1);
    // 两秒后打印2
    let num2 = await printNum(2000, 2);
    console.log(num2);
    // 三秒后打印3
    let num3 = await printNum(3000, 3);
    console.log(num3);
}
//执行结果1,2,3
 run();

如果async函数里面有return 将会被.then()方法接受
如果reject()失败将不会执行return 返回reject()被.catch()方法接受

async函数会返回一个promise,并且Promise对象的状态值是resolved(成功的)
如果你没有在async函数中写return,那么Promise对象resolve的值就是是undefined
async function printNum() {
    // await Promise.resolve("hello worl")  ===> undefined
    // await Promise.reject("失败")  ===> 失败
    return "hello world"   ===> hello world
}

printNum().then(e=>console.log(e)).catch(v=>console.log(v))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值