es6 async 简要用法

        // 如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。

        // 如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。   

        /
        // 异步调用
        function a(n) {
            return new Promise(resolve => {
                setTimeout(() => resolve(n + 1000), n);
            });
        }

        function s1(n) {
            cc.log("s1");
            return 20;
        }

        function s2(n) {
            cc.log("s2");
            return a(n);
        }

        function s3(n) {
            cc.log("s3");
            return a(n);
        }

        async function doIt() {
            let n = 2000;
            let s1str = await s1(n);
            cc.log("doIt end " + s1str);
            let s2str = await s2(n);
            cc.log("doIt end " + s2str);
            let s3str = await s3(n);
            cc.log("doIt end " + s3str);
            cc.log("doIt end");
        }

        // doIt();

        //
        // 并发同步
        function s4() {
            return new Promise(resolve => {
                setTimeout(() => {
                    cc.log("s4 end");
                    resolve(100);
                }, 2000);
            });
        }

        function s5() {
            return new Promise(resolve => {
                setTimeout(() => {
                    cc.log("s5 end");
                    resolve(100);
                }, 2000);
            });
        }

        async function doIt2() {

            // s4 执行完后才执行 s5 浪费时间
            // let s4P = await s4();
            // let s5P = await s5();


            // s4 和 s5 同时进行,最后再输出
            // 方法1
            let s4P = s4();
            let s5P = s5();
            let s4Str = await s4P;
            let s5Str = await s5P;
            cc.log("doIt2 end");


            // 方法2
            // let [s4Result, s5Result] = await Promise.all([s4(), s5()]);
        }

        doIt2();

        //
        // 多并发同时进行
        function s6(n) {
            let time = n * 1000;
            return new Promise(resolve => {
                setTimeout(() => {
                    cc.log(time);
                    resolve(time);
                }, time);
            });
        }

        async function doIt3() {
            // 方法1
            // let gghs = [];
            // for (let i = 0; i < 30; i++) {
            //    gghs.push(i);
            // }

            // gghs.map(async n=>{
            //     let ss = await s6(n);
            //     return ss;
            // });

            // 方法2
            let gghs = [];
            for (let i = 0; i < 30; i++) {
                let p = s6(i);
                gghs.push(p);
            }

            await Promise.all(gghs);

            cc.log("eeeeeeeeeeeeeeeeeeeee");
        }
        // doIt3();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值