Как извлечь из promise нужный мне объект с данными?

По API получаю данные с помощью axios. Если выводит в функции, то выводится объект: введите сюда описание изображения

При вызове функции в переменную data добавляется объект Promise в котором содержится нужный мне объект, но я не знаю как его оттуда вызвать. введите сюда описание изображения

Вот код:

async function getData() {
  try {
    return await axios.get('http://localhost:8000/first')
  } catch (error)  {
    console.error(error)
  }
}

export default {
  data() {
    return {
      data: getData()
    }
  }
}

Ответы (2 шт):

Автор решения: Bakamashine

Переделал код и в итоге в переменную data зачисляются все объекты из promise.

export default {
  data() {
    return {
      data: [] 
    }
  },
  async mounted() {
    await this.getData();
  },
  methods: {
    async getData() {
      try {
        const response = await axios.get('http://localhost:8000/first');
        this.data = response.data; 
      } catch (error) {
        console.error(error);
      }
    }
  }
}
→ Ссылка
Автор решения: Богдан Новотарский

Твоя проблема в том, что getData() — это асинхронная функция, и при вызове она возвращает Promise, а не сразу объект с данными. В data() ты присваиваешь data: getData(), но Vue не ждет завершения Promise, а сразу записывает его как есть. Чтобы корректно получить данные, нужно использовать async внутри created().

Исправленный код:

    async function getData() {
        try {
            const response = await axios.get('http://localhost:8000/first')
            return response.data // Возвращаем только данные
        } catch (error) {
            console.error(error)
        }
    }

    export default {
        data() {
            return {
                data: null // Сначала пусто
            }
        },
        async created() {
            this.data = await getData() // Ждем загрузки данных и записываем
        }
    }

Что изменилось?

  1. Инициализация data в null, потому что данные приходят асинхронно.
  2. created() - асинхронный хук, где ждем getData(), чтобы data уже содержал объект, а не Promise.

Теперь data внутри компонента будет содержать массив объектов, и можно спокойно рендерить их в шаблоне.

→ Ссылка