`
itace
  • 浏览: 172565 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

js中async,await,setTimeout,promise执行顺序

阅读更多

:标注执行顺序

       async function async1() {

            console.log('async1 start');//2

            await async2();

            console.log('async1 end');//7

        }


        async function  async2() {

            console.log('async2');//3

        }

        console.log('script start');//1


        setTimeout(function () {

                console.log('setTimeout');//8

            },0);

        async1();


        new  Promise  (
            function  (resolve) {

                console.log( 'promise1' );//4

                resolve();

            }).then(function () {
                console.log('promise2');//6
            });


        console.log( 'script end' );//5

 

 分析一下 await async2()

await,它先计算出右侧的结果,然后看到await后,中断async函数:

  • 先得到await右侧表达式的结果。执行 async2(),打印同步代码 console.log('async2'),并且return Promise.resolve(undefined)

  • await后,中断async函数,先执行async外的同步代码。

目前就直接打印 console.log('async2')

被阻塞后,要执行async之外的代码。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics