依次执行方法1,方法2的技巧

采用Promis结合async await即可,案例如下


    // 需求,先执行完毕异步say方法,再执行异步run方法
    // 方法一:
    function q1() {
        return new Promise((resolve) => {
            setTimeout(() => {
                resolve("异步1");
            }, 1000)
        })
    }

    function q2() {
        return new Promise((resolve) => {
            setTimeout(() => {
                resolve("异步2");
            }, 1000)
        })
    }

    // (async function(){
    //     console.log("第一次开始")
    //     const res = await q1();
    //     console.log("第一次:",res); 

    //     console.log("第二次开始")
    //     const res2=await q2();
    //     console.log("第二次:",res2);

    // })()

    /* 可以直接改用await q()去调用,而不用自执行函数吗?
       答: 这样不行的,因为await必须是在async函数内部的,如果使用await q()就相当于不是把await写在async里面了 */

    //    可以改成这样(推荐)
    const fn = async ()=> {
        console.log("第一次开始")
        const res = await q1();
        console.log("第一次:", res);
        console.log("第二次开始")
        const res2 = await q2();
        console.log("第二次:", res2);
    }
    fn()

    //方法二(推荐):这种写法比较明朗
        function q1(){
            return new Promise((resolve)=>{
                setTimeout(()=>{
                    resolve("你好,异步1");
                },1000)
            })
        }
        function q2(){
            return new Promise((resolve)=>{
                setTimeout(()=>{
                    resolve("你好,异步2");
                },1000)
            })
        }
        var o1={
            say:async ()=>{
                console.log('say方法:');

                const res = await q1();

                console.log(res);
            },
            run:async function(){
                console.log('run方法:');

                const res = await q2();

                console.log(res);
            }
        }
        // o1.say()
        // o1.run()
        //这种调用不是依次,打印:say方法,run方法,你好,异步1,你好,异步2

        // 正确的姿势:
        var fn=async function(){
            await o1.say();
            await o1.run();
        }
        fn();//正确打印:say方法,你好,异步1,run方法,你好,异步2  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值