@ArtyomPLAY
Люблю Vue, React и все что с этим связано.

Не работает асинхрнонная функция при иморте в js?

Есть кусок кода:
const request = {
  get: url =>
    axios
      .get(API(url))
      .catch(err => console.log(err))
      .then(responseBody)
};

const Reviews = {
  all: () => request.get('/comments')
};

Если использовать Reviews.all() в том же файле , где он определен - все ок, но если это импортнуть в другой .js, ничего не работает, возвращает undefined. В чем может быть проблема?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Все должно работать. Скорее всего вы не правильно импортируете/экспортируете ваш Reviews.

Приведите пожалуйста примеры вашего кода:
1. где вы производите экспорт Reviews
2. где вы подключаете модуль с Reviews
3. где вы вызываете Reviews.all(...)

ошибка в одном из этих кусков кода.

и хотелось бы увидеть содержимое функции responseBody для того чтобы смоделировать вашу ситуацию.

ЗЫ: как это обычно и бывает, проблема в невнимательности (тоже иногда этим грешу)))
res.body неопределен, вот и возвращает undefined

замените в файле agent.js
const responseBody = res => res.body;

на
const responseBody = res => res.data;

вот пример

agent.mjs
import axios from 'axios';

const API_ROOT = 'http://api.startgiven.ru:8080/stargiven-1.0/api';
const API = api => `${API_ROOT}${api}`;

const responseBody = res => res.data;

const handleError = err => {
  if (err && err.response && err.response.status === 401) authStore.logout();
};

const request = {
  get: url =>
    axios
      .get(API(url))
      .catch(err => console.log(err))
      .then(responseBody)
};

const Reviews = {
  all: () => request.get('/comments')
};

export { Reviews };


test.mjs
import { Reviews } from './agent.mjs';

console.log("test1:", Reviews );
console.log("test2:", Reviews.all().then(a=>{
    console.log("test3:", a);
}) );


результат выполнения
$ node --experimental-modules test.mjs 
(node:2668) ExperimentalWarning: The ESM module loader is experimental.
test1: { all: [Function: all] }
test2: Promise { <pending> }
test3: [
  {
    description: 'Все круто, очень. Молодцы!',
    email: 'ivanivanov@gmail.com',
    firstName: 'Иван',
    id: 10,
    lastName: 'Иванов',
    rate: 5,
    status: 0
  },
  {
    description: 'Все круто, очень. Молодцы!',
    email: 'ivanivanov@gmail.com',
    firstName: 'Иван',
    id: 11,
    lastName: 'Иванов',
    rate: 6,
    status: 0
  },
  {
    description: 'Все круто, очень. Молодцы!',
    email: 'ivanivanov@gmail.com',
    firstName: 'Иван',
    id: 12,
    lastName: 'Иванов',
    rate: 6,
    status: 0
  },
  {
    description: 'Все круто, очень. Молодцы!',
    email: 'ivanivanov@gmail.com',
    firstName: 'Иван',
    id: 13,
    lastName: 'Иванов',
    rate: 6,
    status: 0
  },
  {
    description: 'Все круто, очень. Молодцы!',
    email: 'ivanivanov@gmail.com',
    firstName: 'Иван',
    id: 14,
    lastName: 'Иванов',
    rate: 6,
    status: 0
  },
  {
    description: 'СУПЕР',
    email: 'info@3peaks.cloud',
    firstName: 'Aline',
    id: 15,
    lastName: 'Basdasd',
    rate: 5,
    status: 0
  },
  {
    description: 'СУПЕР',
    email: 'info@3peaks.cloud',
    firstName: 'Aline',
    id: 16,
    lastName: 'Basdasd',
    rate: 5,
    status: 0
  },
  {
    description: 'СУПЕР',
    email: 'info@3peaks.cloud',
    firstName: 'Aline',
    id: 17,
    lastName: 'Basdasd',
    rate: 5,
    status: 0
  },
  {
    description: 'СУПЕР',
    email: 'info@3peaks.cloud',
    firstName: 'Aline',
    id: 18,
    lastName: 'Basdasd',
    rate: 5,
    status: 0
  }
]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
22 сент. 2019, в 15:19
500 руб./за проект
22 сент. 2019, в 14:31
300 руб./за проект
22 сент. 2019, в 14:31
4000 руб./за проект