Saya memiliki fungsi berikut dalam proyek saya yang saya akses dari beberapa file.

getCountry: async function () {
  let country = null
  try {
    axios
    .get('http://ip-api.com/json/')
    .then(response => (this.country = response.data.countryCode))
    console.log('Country', country)
  } catch (error) {
    console.log(error)
  }
  return country
}

Ini berfungsi pada file lain, tetapi untuk beberapa alasan saya tidak dapat menggunakannya dengan sukses di file tertentu dengan situasi ini.

Ini adalah bagian data saya:

 data() {
    return {
      model: {
        country: '',
        state: '',
        city: ''
      },
      country: null
    }
  },

Dan pada bagian mount saya mencoba melakukan hal berikut:

this.country = await this.getCountry()
if (this.country != null) {
  this.model.country = this.country
}

Nilai tidak pernah ditetapkan ke model.country. Ketika saya memeriksa nilai this.country, itu mendapatkan hasil dari fungsi. Saya kira itu mungkin ada hubungannya dengan fakta bahwa itu adalah fungsi async, tetapi saya tidak yakin apa yang harus dilakukan.

1
falcom4ever 10 Juli 2020, 09:08

1 menjawab

Jawaban Terbaik

await harus digunakan di dalam fungsi async, bukan di luarnya. Silakan coba

getCountry: async function () {
  let country;
  try {
    const response = await axios.get('http://ip-api.com/json/');
    country = response.data.countryCode;
  } catch (error) {
    console.log(error)
  }
  return country
}
2
Praveen Dass 10 Juli 2020, 06:27