'await' не влияет на тип этого выражения - PullRequest
1 голос
/ 24 февраля 2020

Я искал по этому поводу, но я не нашел ничего конкретного c для того, что мне нужно. Если есть, пожалуйста, поделитесь здесь.

Я пытаюсь создать универсальный c сервис для вызова в различных компонентах. Поскольку это функция, которая запрашивает данные из внешнего источника, мне нужно рассматривать ее как асинхронную функцию. Проблема в том, что редактор возвращает сообщение «await» не влияет на тип этого выражения ». И приложение действительно дает сбой, поскольку данных пока нет.

People. js вызывает запросы на обслуживание. js

import React, { useEffect, useState } from "react";
import requests from "../services/requests";

export default () => {

   // State
   const [ people, setPeople ] = useState({ count: null, next: null, previous: null, results: [] });

   // Tarefas iniciais
   useEffect(() => {
       carregarpeople(1);
   }, []);

   // Carregando os dados da API
   const carregarpeople = async (pageIndex) => {
       const peopleResponse = await requests("people", pageIndex);

       // This line below needs to be executed but it crashes the app since I need to populate it with the data from the function requests
       // setPeople(peopleResponse);
   }


   return (
       <div>
       {
           people.results.length > 0 ? (
               <ul>
                   {
                       people.results.map(person => <li key = { person.name }>{ person.name }</li>)
                   }
               </ul>    
           ) : <div>Loading...</div>
       }
       </div>
   )
  }

И это запросы. js, где он возвращает json от API

export default (type, id) => {
console.table([ type, id ]);

fetch(`https://swapi.co/api/${type}/?page=${id}`)

.then(response => response.json())
.then(json => {
    console.log(json);
    return json;
})}

enter image description here

1 Ответ

4 голосов
/ 24 февраля 2020

await полезно, только если вы используете его с обещанием, но requests не возвращает обещание. У него вообще нет оператора return, поэтому он неявно возвращает undefined.

Похоже, вы намеревались вернуть обещание, поэтому вот ваш код с добавлением возврата в:

export default (type, id) => {
  console.table([ type, id ]);
  return fetch(`https://swapi.co/api/${type}/?page=${id}`)
    .then(response => response.json())
    .then(json => {
      console.log(json);
      return json;
    })
}

ps, если вы предпочитаете делать это, используя async / await, это будет выглядеть так:

export default async (type, id) => {
  console.table([ type, id ]);
  const response = await fetch(`https://swapi.co/api/${type}/?page=${id}`);
  const json = await response.json();
  console.log(json);
  return json;
}
...