0

i want this function to run in another function before the code for the second function execute.

here is the code for first function:

const [expression, setExpression] = useState("");
const [result, setResult] = useState("");

useEffect(() => {
    if (localStorage.getItem("history_data")) {
        const storedData = JSON.parse(localStorage.getItem("history_data"));
        setHistoryData(storedData);
    }
}, [])

const Logic = () => {
if (expression.toString().charAt(0) === "0" && expression.toString().charAt(1) === "1" || expression.toString().charAt(1) === "2" || expression.toString().charAt(1) === "3" || expression.toString().charAt(1) === "4" || expression.toString().charAt(1) === "5" || expression.toString().charAt(1) === "6" || expression.toString().charAt(1) === "7" || expression.toString().charAt(1) === "8" || expression.toString().charAt(1) === "9" || expression.toString().charAt(1) === "0") {
    setExpression(expression.replace(expression.charAt(0), ''));
}
if (expression.charAt(expression.indexOf("+") + 1) === "0" && expression.charAt(expression.indexOf("+") + 2) === "1" || expression.charAt(expression.indexOf("+") + 2) === "2" || expression.charAt(expression.indexOf("+") + 2) === "3" || expression.charAt(expression.indexOf("+") + 2) === "4" || expression.charAt(expression.indexOf("+") + 2) === "5" || expression.charAt(expression.indexOf("+") + 2) === "6" || expression.charAt(expression.indexOf("+") + 2) === "7" || expression.charAt(expression.indexOf("+") + 2) === "8" || expression.charAt(expression.indexOf("+") + 2) === "9" || expression.charAt(expression.indexOf("+") + 2) === "0") {
    setExpression(expression.replace(expression.charAt(expression.indexOf("+") + 1), ""));
}
if (expression.charAt(expression.indexOf("-") + 1) === "0" && expression.charAt(expression.indexOf("-") + 2) === "1" || expression.charAt(expression.indexOf("-") + 2) === "2" || expression.charAt(expression.indexOf("-") + 2) === "3" || expression.charAt(expression.indexOf("-") + 2) === "4" || expression.charAt(expression.indexOf("-") + 2) === "5" || expression.charAt(expression.indexOf("-") + 2) === "6" || expression.charAt(expression.indexOf("-") + 2) === "7" || expression.charAt(expression.indexOf("-") + 2) === "8" || expression.charAt(expression.indexOf("-") + 2) === "9" || expression.charAt(expression.indexOf("-") + 2) === "0") {
    setExpression(expression.replace(expression.charAt(expression.indexOf("-") + 1), ""));
}
if (expression.charAt(expression.indexOf("*") + 1) === "0" && expression.charAt(expression.indexOf("*") + 2) === "1" || expression.charAt(expression.indexOf("*") + 2) === "2" || expression.charAt(expression.indexOf("*") + 2) === "3" || expression.charAt(expression.indexOf("*") + 2) === "4" || expression.charAt(expression.indexOf("*") + 2) === "5" || expression.charAt(expression.indexOf("*") + 2) === "6" || expression.charAt(expression.indexOf("*") + 2) === "7" || expression.charAt(expression.indexOf("*") + 2) === "8" || expression.charAt(expression.indexOf("*") + 2) === "9" || expression.charAt(expression.indexOf("*") + 2) === "0") {
    setExpression(expression.replace(expression.charAt(expression.indexOf("*") + 1), ""));
}
if (expression.charAt(expression.indexOf("/") + 1) === "0" && expression.charAt(expression.indexOf("/") + 2) === "1" || expression.charAt(expression.indexOf("/") + 2) === "2" || expression.charAt(expression.indexOf("/") + 2) === "3" || expression.charAt(expression.indexOf("/") + 2) === "4" || expression.charAt(expression.indexOf("/") + 2) === "5" || expression.charAt(expression.indexOf("/") + 2) === "6" || expression.charAt(expression.indexOf("/") + 2) === "7" || expression.charAt(expression.indexOf("/") + 2) === "8" || expression.charAt(expression.indexOf("/") + 2) === "9" || expression.charAt(expression.indexOf("/") + 2) === "0") {
    setExpression(expression.replace(expression.charAt(expression.indexOf("/") + 1), ""));
}
}

I want this function to execute in second function before the code for the second function execute.

here is the code for second function:

const Calculate = () => {
    Logic();
    
    setResult(expression);
    setExpression(eval(expression).toString())

    const Data = expression + " = " + eval(expression);
    const now = new Date();
    const month = now.toDateString().split(' ')[1];
    const date = now.getDate();
    const year = now.getFullYear();
    const hour = now.getHours();
    const min = now.getMinutes();
    const dateTime = date + " " + month + " " + year + "  " + hour + ":" + min;
    if (expression) {
        const newDataArray = { id: new Date().getTime().toString(), data: Data, time: dateTime };
        setHistoryData([...historyData, newDataArray]);
        localStorage.setItem("history_data", JSON.stringify([...historyData, newDataArray]));
    }
}
  • actually i am making a calculator and i get error when it calculate two numbers starting from zero like "03+02" it gives error "Octal literals are not allowed in strict mode". so when it starts calculating i want it to remove unneccessary zero but before i remove zero it calculates equation and gives me error. – Dhruv Dhing Jan 05 '22 at 14:07
  • Does this answer your question? [React.js, wait for setState to finish before triggering a function?](https://stackoverflow.com/questions/37401635/react-js-wait-for-setstate-to-finish-before-triggering-a-function) – pringi Jan 07 '22 at 11:08

0 Answers0