Heim  >  Fragen und Antworten  >  Hauptteil

So verwenden Sie „await“ mit nicht asynchronen Funktionen

await muss in einer asynchronen Funktion verwendet werden. Jedes Mal, wenn wir wait verwenden möchten, müssen wir es also zuerst in der asynchronen Funktion definieren und dann diese asynchrone Funktion aufrufen.

Einfach so

async function fn(){}
fn()

Ein detaillierteres Beispiel

        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);

Jedes Mal, wenn Sie „await“ verwenden, müssen Sie „async“ noch einmal definieren und es dann aufrufen. Ich finde diesen Vorgang etwas mühsam und repetitiv, daher möchte ich fragen, ob es eine Möglichkeit gibt, dieses Problem zu optimieren oder zu lösen.

某草草某草草2735 Tage vor686

Antworte allen(3)Ich werde antworten

  • 为情所困

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

    async 可以不需要 await, await 必须依赖 async

    Antwort
    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(...)
    }

    Antwort
    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);

    Antwort
    0
  • StornierenAntwort