首页 > 解决方案 > Wait for an Axios call to finish in Quasar / Vue

问题描述

I have a function in a Quasar application that needs to call an Web API that I need to wait until I get the results back to call the next function. I've posted my code and I'm sure that I'm missing some await or async or have them in the wrong place.

  Global ex='';   

  testFunction3(arg){
   console.log(arg)
  } , 

  testFunction2(){  
  this.ex = update_Members_data_term("@musc.edu");
  },

  async  testFunction(){  
  await this.testFunction2()

  this.testFunction3(this.ex)
 },

API call:

function update_Members_data_term(term) {
 axios.get(
    'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi', {
        params: {
            db: 'pubmed',
            api_key: '',
            retmode: 'json',
            retmax: 200,
            term: term
        }
    }
).then(async response => {
    return response.data.esearchresult.idlist;      
}).catch(error => {
    console.log(error.response)
})

}

Thanks for the help.

标签: javascriptvue.js

解决方案


testFunction2不返回 aPromise所以await什么都不做。你实际上在做await null;

所以修复将是:

function update_Members_data_term(term) {
    return new Promise((resolve,reject) => {
        axios.get(
            'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi', {
            params: {
                db: 'pubmed',
                api_key: '',
                retmode: 'json',
                retmax: 200,
                term: term
            }
        }
        ).then(async response => {
            resolve(response.data.esearchresult.idlist);
        }).catch(error => {
            reject(error.response)
        })
    });
}

async testFunction2(){  
this.ex = await update_Members_data_term("email_here");
},
  • 请注意,您可能只是await axios.get不返回 Promise,但我不确定语法是什么。

推荐阅读