I have the problem, that my function runs, before the other one ends. I tried to runs the function GetCategories in GetEntries, but that doesn't work for me.
GetEntries only works with an empty string because the functions is executed too early. Although there are categories in the useEffect function, the function is not rerender. Please help.
import ...
export default function CFramework() {
const year = GetYears();
const title = GetCategories();
const entries = GetEntries(title);
const factor = GetFactor(title);
return
<>
<p>{year}</p>
<p>Title: {title}</p>
<p>Entries: {entries}</p>
<p>Factor: {factor}</p>
</>
GetCategories:
import { useState, useEffect } from "react";
import Parse from "parse";
function GetCategories() {
const [categories, setCategories] = useState([]);
useEffect(() => {
getCategories();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
async function getCategories() {
const Categories = Parse.Object.extend("BerechnungsKategorie");
const query = new Parse.Query(Categories);
await query.find().then(function (results) {
results.forEach((e) => {
categories[parseInt(e.get("ID"))] = e.get("Name");
});
});
setCategories([...categories]);
}
return categories;
}
export default GetCategories;
GetFactor:
import { useState, useEffect } from "react";
import Parse from "parse";
import GetCategories from "./GetCategories";
export default function GetEntries(categories) {
const [entries, setEntries] = useState([]);
useEffect(() => {
async function getValues() {
categories.forEach((c, index) => {
getEntries(c, index);
});
async function getEntries(category, index) {
var temp = [];
var q = new Parse.Query("BerechnungsKategorie");
q.equalTo("Name", category);
var results = await q.find();
results.forEach((element, index) => {
var q = new Parse.Query("BerechnungsEintrag");
q.equalTo("Kategorie", category);
q.find().then(function (category) {
category.forEach((e, index) => {
temp[index] = e.get("Name");
});
entries[index] = temp;
if (entries.length === categories.length) {
setEntries([...entries]);
}
});
});
}
}
getValues();
console.log(categories);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, categories);
return entries;
}