Почему моя функция возвращает обещание, а не объект из моей базы данных? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть следующие две функции, пытающиеся получить данные из базы данных mongo с конечной точки экспресс-сервера, которую я настроил. Этот код находится в моем приложении React.

export function getContacts() {
  let data = fetch('/api/contacts').then((data) => {
    return data.json();
  }).catch(err => console.log(err));

  return data;
}

и следующее, что вызывает его

const initialState = getContacts()
  .then((body) => {
    console.log('body: ');
    console.log(body);
    return body;
  }).catch(err => console.log(err));

когда я захожу body это обещание. Я ожидал массив документов JSON из БД. Мой getContacts () должен вернуть обещание, а затем мой обратный вызов в initialState получает от него данные.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Вызов data.json() фактически возвращает обещание по замыслу. Взгляните на страницу документации здесь для объяснения причин.

Вы можете исправить это, связав другой вызов then или объявив вашу функцию как async и используя await.

0 голосов
/ 04 апреля 2019

Метод .json () возвращает вам обещание, потому что ответ, который вы получаете на вызов api, находится в стадии, в этом случае заголовки возвращаются в ответе, следовательно, response.json () запускается, и вы получаете обещание получить тело, пока вы не получили тело, а только заголовки.

Для получения тела вам нужно выполнить обещание, как показано ниже

response.json().then(data => ({
    data: data,
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...