Hello,
I'm trying to fetch restaurants data in React using async and await and update my restaurants state with the returned restaurants response
In the code below (under Method 2) I created an async function and called await fetchRestaurants()
which returns a response
I don't understand why within the aync function, I'm able to access the list of restaurants data. However, when I return the data, it's a promise
Can someone explain why this happens?
const fetchRestaurants = () => { ... // returns {Promise<Array<{ name: string, rating: number, location: string}>} } const [restaurants, setRestaurants] = useState([]); useEffect(() => { // Method 1 - works! const promise = fetchRestaurants(); promise .then((data) => { setRestaurants(data); }) .catch((error) => { console.error(error); }); // Method 2 - doesn't work const asyncFetchRestaurants = async () => { try { const data = await asyncFetchRestaurants(); console.log("INSIDE", data); // this prints out the list of restaurants return data; // why does this return a promise? } catch (error) { console.error(error); } }; const data = asyncFetchRestaurants(); // why is data a promise and not a list of restaurants console.log("OUTSIDE", data); // this prints out a promise! setRestaurants(data) // this doesn't work! }, []);
Top comments (0)