Как использовать async/await в Vue.js?

Я новичок в ES7

Я хочу использовать async/await в Vue.js

Вот мой код

created (){
    this.getA()
    console.info(2)
    this.getB() 
},
methods : {
    getA (){
        console.info(1)
    },
    getB (){
        console.info(3)
    }
}

Он возвращается

1
2
3

Но когда я использую его с аксиомами, то

created (){
    this.getA()
    console.info(2)
    this.getB() 
},
methods : {
    getA (){
        $axios.post(`/getA`,params){
        .then((result) => {
            console.info(1)
        })
    },
    getB (){
        console.info(3)
    }
}

Он возвращается

2
3
1

Поэтому я хочу добавить async/await в этот код.

Как я могу использовать async/await?

Я старался

async created (){
    await this.getA()
    console.info(2)
    await this.getB() 
},
methods : {
    getA (){
        $axios.post(`/getA`,params){
        .then((result) => {
            console.info(1)
        })
    },
    getB (){
        console.info(3)
    }
}

Он возвращает тот же результат.

getA не возвращает обещанное.
tkausl 02.03.2019 06:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
29
1
82 675
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

попробуй это

async created (){
    let resultFromgetA = await this.getA()
    console.info(2)
    await this.getB() 
},
methods : {
    getA :() =>{
        return $axios.post(`/getA`,params);
    },
    getB : async() =>{
        //use await key with async calls
        console.info(3)
    }
}
Ответ принят как подходящий

Вы должны использовать либо then, либо await, а не оба, как показано ниже:

При использовании then

created () {
    this.getA().then((result) => {
            console.info(1)
            console.info(2)
            this.getB()
        })
},
methods : {
    getA () {
        return $axios.post(`/getA`,params);
    },
    getB (){
        console.info(3)
    }
}

При использовании await

async created (){
    await this.getA()
    console.info(1)
    console.info(2)
    this.getB() 
},
methods : {
    getA : async() => {
        return $axios.post(`/getA`,params);
    },
    getB : () => {
        console.info(3)
    }
}

Обратите внимание, что при вызове getB() вам не нужны then или await, поскольку он не асинхронный.

поскольку getB не является асинхронным, то какая польза от async для getB?

Kevin Chandra 05.11.2019 01:39

В отличие от того, что сказал @thanthu, вы можете использовать как then, так и await. В своем первом посте вы пропустили только добавление return в метод getA:

async created (){
    await this.getA()
    console.info(2)
    await this.getB() 
},
methods : {
    getA() {
        return $axios
            .post(`/getA`,params){
            .then((result) => {
                console.info(1)
            });
    },
    getB() { 
        console.info(3)
    }
}

ты сможешь. Но должны ли вы? однажды вы окажетесь посреди блоков try-catch и .catch(err => {console.info(err)}) с кучей инструкций async-await, .then и .all. Это может быть вторым по сложности испытанием для джентльмена. Разумеется, после попытки родить ребенка. Для женщин - самый сложный.

maxkoryukov 11.12.2019 20:37

это все еще похоже на путь, вы ожидание для обещания, которое заканчивается, когда console.info(1) выполняется

genuinefafa 23.04.2020 18:23

Вуэйс, пример с запросом API Аксиос. подробнее между кодом

  methods: {
    async getA(data, type) {
      console.info("This is a API calls, that the response time is vary.");

      const result = await this.getSources();
      
      console.info("Do what you want after completing the prev job.");
    },
    getSources() {
      return new Promise(resolve => {

        // Here the point is the resolve that you should resolve('something');.
        this.axios
          .get("/api/sources")
          .then((resp) => {
            this.sources = resp.data;
            resolve('resolved');
          })
          .catch(() => {
            resolve('rejected');
          });
      });
    },
  },

Другие вопросы по теме