依次執行方法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  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章