<!--

        JS运行机制的顺序

        1.同步

        2.process.nextTick

        3.微任务(promise.then)

        4.红任务(计时器,ajax,读取文件)

        5.setImmediate

        这是一次事件循环,如果还有任务队列里还有事件,会在setImmediata之后执行

        运行栈会执行同步代码,异步代码会在任务队列中执行,事件循环机制会不断检测任务队列中的事件,

        存在事件即会执行,settimeout的延迟是延迟后将事件存放到任务队列中。

 

-->
        async function fun() {
            return 1
        }
        //async函数的返回值是一个promise对象,所以可以调用。then方法,data为async函数的返回值
        function fun() {
            return new Promise((resolve) => {
                resolve(2)
            })
        }
        //这两种写法的结果是一样的。
        fun().then((data) => {
            console.log(data)
        })
        let p1 = new Promise((resolve => { resolve(3) }))
        let p2 = new Promise((resolve => { resolve(4) }))
        async function Fun() {
            let a = await p1 //可以通过await调用promise对象
            let b = await p2
            console.log(a)
            console.log(b)
            return 99
        }
        Fun().then((data) => {
            console.log(data)
        })
        async function fun1() {
            console.log(300)
            let data = await fun2()
            console.log(data)
        }
        async function fun2() {
            console.log(200)
            return 100
        }
        fun1()