I'm trying to use fetch() to simulate getting some data from ./Network.ts and doesn't work. I get this in console:
Response {type: "basic", url: "csb.app/[object%20Promise]", redirected: false, status: 200, ok: true…}
My component:
import React, { useState, useEffect } from "react";
import { getOrders} from "./network";
export const Component: React.FC = () => {
const [searchResults, setSearchResults] = useState({});
useEffect(() => {
fetchResults();
},[]);
const fetchResults = async() => {
try {
const data = await fetch(getOrders());
setSearchResults(data);
} catch (e) {
return console.log(e);
}
};
return (
<table className="table table-striped table-hover">
<thead className="thead-dark">
<tr>
<th scope="col">ID</th>
<th scope="col">Name</th>
<th scope="col">Amount</th>
<th scope="col">ETA</th>
<th scope="col">Status</th>
</tr>
</thead>
<tbody>{console.log(searchResults)}</tbody>
</table>
);
};
Network.ts
interface Delivery {
id: number;
name: string;
amount: number;
status: string;
eta?: number;
}
export const getOrders = (): Promise<Order[]> => {
return new Promise((resolve) => {
setTimeout(() => {
const data = [
{
id: 1,
name: "Order 1",
amount: 3,
status: "active",
eta: 15
},
{
id: 2,
name: "Order 2",
amount: 5,
status: "pending"
},
{
id: 3,
name: "Order 3",
amount: 3,
status: "active",
eta: 10
},
{
id: 4,
name: "Order 4",
amount: 4,
status: "upcoming"
},
{
id: 5,
name: "Order 5",
amount: 3,
status: "active",
eta: 25
},
{
id: 6,
name: "Order 6",
amount: 3,
status: "active",
eta: 5
}
];
resolve(data);
}, 1000);
});
};
Also, I need them to render them by status and eta ascendant. Status should be sorted in the following order: active, upcoming, pending.
Any ideas how to achieve this?
I'm trying to use fetch() to simulate getting some data
Well you shouldn't. What you're doing in getOrders is using setTimeout to simulate getting some data asynchronously. That's fine - but you don't need fetch for that! You use fetch only when really making a network request to get data, not for simulation. So just drop it from your code and it'll work:
const fetchResults = async() => {
try {
const data = await getOrders();
// ^^^^^^^^^^^^^^^^^
setSearchResults(data);
} catch (e) {
return console.log(e);
}
};
When you want to get rid of the simulation, you should change only the getOrders implementation and put the fetch() call inside there, replacing the new Promise((resolve) => {…}) stuff.