Estoy tratando de ejecutar un ciclo for en una aplicación React que se ejecutará a través de un rango de tokens definido por el usuario y realizará ofertas basadas en i del ciclo for. Suena muy simple, y lo es.
Sin embargo, tengo un problema en el que agregué un bloque para verificar si "isBidding" cambia a falso, lo que debería romper el bucle for. isBidding es una variable de estado local para el componente.
Parece que cuando comienza el ciclo for, isBidding siempre será verdadero, incluso cuando el estado cambia a falso mientras se ejecuta el ciclo. Por mi vida, no puedo averiguar cómo garantizar que la variable de estado global isBidding se actualice dentro de un bucle for.
for (let i = startTokenId; i < endTokenId + 1; i++) { // Inside the loop we try to place bids on each token, waiting for user action setBidderScanningString(`Bidding on token id #${i} (${i} of ${endTokenId})...`); // Try to place the bid try { await createBuyOrder(i); } catch (e) { parseBidError(e); } // Check if loop is over, if so set bidding to false and end if (i.toString().toLowerCase() === endTokenId.toString().toLowerCase()) { setBidderScanningString('Bidding finished...'); setIsBidding(false); return; } // Check whether isBidding has been set to false if (!isBidding) { return; } }Desde dentro del bucle he intentado llamar a una función, que devuelve el último estado de isBidding, sin embargo, esto siempre se evalúa como verdadero.
He intentado agregar isBidding en la segunda condición del ciclo for, sin embargo, siempre se evalúa como verdadero. También intenté agregar etiquetas y anidarlas dentro de un ciclo while (isBidding), sin embargo, siempre se evalúa como verdadero.
También intenté mover este código a un useEffect con una dependencia de isBidding, sin embargo, el bucle for siempre devuelve verdadero.
¿Hay algo deslumbrantemente obvio que me estoy perdiendo?
Parece que está utilizando useState setter setIsBidding y getter isBidding. JavaScript es de subproceso único y el bucle for se ejecuta de forma síncrona, lo que significa que todo el bucle terminará antes de que los efectos de llamar a setIsBidding se reflejen en isBidding.
Sugeriría declarar un valor localmente para usar dentro del ciclo for, y luego, una vez que finalice el ciclo, puede guardar el valor en setIsBidding si lo desea.