aysnc await promise

aysnc await promise

async用于声明一个函数是异步的,await可以认为是 aysnc wait 的简写,等待一个异步方法执行完成;

当调用一个async函数时,会返回一个promise对象;

await只能出现在asyna中,否则会报错;async函数中可能会有await表达式,await会使async函数暂停执行,直到表达式中的Promise解析完成后继续执行async中await后面的代码并返回解决结果;

async/await其实就是一个语法糖,它是基于promise实现的,async函数其实是对promise做了一个封装,await返回值是一个promise对象,它只是把await后面的代码放在了promise.then()中执行,也就是await相当于promise.then();

  async function test1() {
            return 1
        }
        async function test2() {
            return Promise.resolve(2)
        }
        const res1 = test1()
        const res2 = test2()
        console.log(res1)
        console.log(res2)

async function test3() {
            const p3 = Promise.resolve(3)
            p3.then(data3 => {
                console.log('data3', data3)
            })

            const data3 = await p3
            console.log('data3', data3)
        }
        test3()

当执行一个async函数时,返回的是一个promise对象,也就是在函数内部,如果返回的是一个普通值的话,它会帮助封装成一个promise对象,如果直接返回的是promise对象,那它就会直接返回这个promise对象;

promise.catch()相当于try…catch

async function test6() {

            const p6 = Promise.reject(6)

            try {
                const data6 = await p6
                console.log('data6', data6)
            } catch (e) {
                console.error('e', e)
            }

        }
        test6()

async await promise的执行顺序

    async function async1() {
        console.log('async1 start');
        await async2();
        console.log('asnyc1 end');
    }
    async function async2() {
        console.log('async2');
    }
    console.log('script start');
    setTimeout(() => {
        console.log('setTimeOut');
    }, 0);
    async1();
    new Promise(function (reslove) {
        console.log('promise1');
        reslove();
    }).then(function () {
        console.log('promise2');
    })
    console.log('script end');

输出顺序:
script start
async1 start
async2
promise1
script end
asnyc1 end
promise2
setTimeOut

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值