class ProcessingRequest {
constructor() {
this.abortController = null;
}
async Request0(URL) {
try {
this.abortController = new AbortController();
// Вариант первый:
this.abort()
// При создании запроса, старый будет сразу отменяться
const Res = await fetch(URL, { signal: this.abortController.signal });
if (!Res.ok) {
return "Page Not Found 404";
}
const ProductArr0 = await Res.json();
return ProductArr0;
} catch (error) {
return error.message;
}
}
async Request1(URL1) {
try {
const ProductArr1 = await this.Request0(URL1);
if (typeof ProductArr1 === "string") {
return ProductArr1;
}
return ProductArr1.filter(({ title }) => title.includes("New"));
} catch (error) {
return error.message;
}
}
abort() {
if (this.abortController) {
this.abortController.abort();
}
}
}
function Pul() {
const [listImg, setLis] = useState([]);
const [resError, setResError] = useState("");
useEffect(() => {
(async () => {
const Res = await ProReqObj.Request1(
"https://kijo-3c490.firebaseio.com/.json"
);
if (typeof Res !== "string") {
setLis(Res);
} else {
setResError(Res);
}
})();
// Вариант второй
// Компонент отменяет запрос
return () => {
ProReqObj.abort()
};
}, []);
return <div />;
}