首頁  >  問答  >  主體

javascript - 如何在非async函數下使用await

await需要在async函式中使用,所以每次我們想要使用await必須先在async函式中定義,然後再呼叫這個async函式。

就比如這樣

async function fn(){}
fn()

詳細一點的範例

        async function asy(){
            // 获取当前城市的位置 获取热门城市 获取所有城市
            const [resCityGuess,resCityHot,resCityAll]=await Promise.all([
                            this.http.get('api/v1/cities?type=guess'),
                            this.http.get('api/v1/cities?type=hot'),
                            this.http.get('api/v1/cities?type=group')
            ])
            this.cityGuessName=resCityGuess.data.name;
            this.cityGuessId=resCityGuess.data.id;
            this.cityHot=resCityHot.data;
            this.cityAll=resCityAll.data;
        }
        asy.apply(this);

每次使用await之前都需要多定義一次async然後再調用,這一個過程我覺得略微麻煩以及重複,所以想問下是否存在什麼辦法優化或者解決這一問題?

某草草某草草2737 天前693

全部回覆(3)我來回復

  • 为情所困

    为情所困2017-05-16 13:35:34

    async 可以不需要 await, await 必須依賴 async

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-16 13:35:34

    async宣告的函數回傳值是Promise物件:

    這樣一個函數

    async function fn() {}

    使用await就需要放在async函數中

    async function anthor() {
        await fn()
    }

    不使用await就當作Promise用

    function anthor() {
        fn().then(...).catch(...)
    }

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-16 13:35:34

    試試這樣

    function asy(){
        // 获取当前城市的位置 获取热门城市 获取所有城市
        Promise.all([
            this.http.get('api/v1/cities?type=guess'),
            this.http.get('api/v1/cities?type=hot'),
            this.http.get('api/v1/cities?type=group')
        ]).then(values =>{
            this.cityGuessName=resCityGuess.data.name;
            this.cityGuessId=values[0].data.id;
            this.cityHot=values[1].data;
            this.cityAll=values[2].data;
        });
    }
    asy.apply(this);

    回覆
    0
  • 取消回覆