async函数执行顺序

/**
 * Async函数能让你的 Promise 代码更简洁,this都可以省略了
 * async函数,和普通函数一样
 * await 后面要跟一个 Promise才有意义
 * 1.等待Promise中resolve才会往后执行
 * 2.如果resolve有参数,可以在await前面接收使用
 * 任何函数都可以被标记为async
 *      箭头函数,命名函数,匿名函数
 * Async函数执行顺序
 *      函数中的await只是在函数内部等待而已,不会阻塞函数之后的代码执行
 * Async函数的返回值
 */
//就是一个函数,一会儿别人调用
function sleep (time) {
    return new Promise((resolve, reject) => {
        setTimeout(function () {
            // console.log('444')
            resolve()
        },time)
    })
}
//回调地狱(太麻烦,不推荐使用)
// setTimeout(function () {
//   console.log(1)//隔1秒显示
//   setTimeout(function () {
//     console.log(2)//隔2秒显示从0开始和之前的没关系
//     setTimeout(function () {
//       console.log(3)//隔3秒显示从0开始和之前的没关系
//       setTimeout(function () {
//         console.log(4)//隔4秒显示从0开始和之前的没关系
//       }, 4000)
//     }, 3000)
//   }, 2000)
// }, 1000)


//Promise
//调用sleep函数
// sleep(1000)
//     .then(function () {
//         console.log(1)//隔1秒显示
//         return sleep(2000)
//     })
//     .then(() => {
//         console.log(2)//隔2秒显示从0开始和之前的没关系
//         return sleep(3000)
//     })
//     .then(() => {
//         console.log(3)//隔3秒显示从0开始和之前的没关系
//     })

//async函数  
async function main () {
    console.log('step => 2')//进来就执行
    //await后面跟普通数据没有意义
    // const data = await 123
    // console.log(data)//123

    //后面跟Promise对象才有意义
    //await会等待 Promise对象中 resolve 了才继续往后执行,就是3秒后执行
    await sleep(3000)//多少秒后执行,3秒后才执行下面的
    console.log('step => 3')
    console.log(1)

    // await 会等待 Promise resolve
    // 如果 resolve 有参数,我们可以在 await 前面声明变量|常量接收
    const data = await new Promise((resolve, reject) => {
        resolve('hello')
    })
    console.log(data)

    await sleep(2000)
    console.log(2)
}
main()
console.log('step => 4')//第二个执行
// step => 2
// step => 4
// step => 3
// 1
// hello
// 2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值