J'essaie actuellement d'obtenir une simple opération de crud dans ReactJS + ExpressJS. J'ai une méthode asyncho sur Submit qui gère la soumission de la forme.
La boucle puisque je n'ai rien à vraiment foreach code> ci-dessous doit contenir des contrôles d'élément de tableau et si la fonction anonyme renvoie false, l'application doit quitter le
OnSubmit code>, mais le bloc code> track code> gère le blocage pour être exécuté avant le
foreach code> finitions. p>
attendre code> dans mon
foreach code> boucle, existe-t-il un moyen de "attendre" jusqu'à ce qu'il finit complètement et le code d'exécution qui se trouve à l'intérieur du bloc code> track code> Garder le
Onsubmit code> méthode asynchrone? P>
onSubmit = async (e) => {
e.preventDefault();
if (something) {
return false;
}
// This foreach gets executed after the try-catch below, but I want it to execute first
someArr.forEach(item => {
if (item.arr === undefined || item.arr.length == 0) {
return false;
}
});
try {
// This has some await axios.post() calls...
} catch { }
}
3 Réponses :
Je ne vois aucune raison de la raison pour laquelle vous ne devriez pas être capable d'effectuer toute la logique à l'intérieur du bloc Try-Catch, donnez ceci.
onSubmit = async (e) => { e.preventDefault(); if (something) { return false; } try { let should_call = true; someArr.forEach(item => { if (item.arr === undefined || item.arr.length == 0) { should_call false; } }); if(should_call){ // Call has some await axios.post() calls... } } catch { } }
La boucle de Foreach est déjà synchrone. Voici une modification de votre méthode qui démontre ceci:
Le bloc d'essai peut encore être exécuté avant la fin des finitions de Foreach. Au cas où je n'étais pas clair auparavant, je souhaite quitter la méthode Onsubmit code> si mon
if-instruction code> dans le
foreach code> renvoie false. La réponse @antonku fournie semble être une bonne approche.
Je comprends, mais pour être clair, cela n'a rien à voir avec la boucle de Foreach qui ne sont pas synchrones. La réponse de Antonku est bonne.
Si je comprends bien l'intention est de revenir de Si c'est correct, vous pouvez la réécrire à l'aide de Array.Prototype.Some : P> retour code> instruction à l'intérieur du rapport
foreach code> n'empêche pas d'essayer d'évaluer l'évaluation de capture car ce
retour code> est à l'intérieur du rappel, de sorte qu'il revient de la Callback au lieu de la fonction externe
Onsubmit code>.
Onsubmit code> si un élément de la matrice répond à la condition:
(item.arr === non défini || item.arr.length == 0) code> p>
onSubmit = async (e) => {
e.preventDefault();
if (something) {
return false;
}
const shouldReturn = someArr.some(item => item.arr === undefined || item.arr.length === 0);
if (shouldReturn) {
return;
}
try {
// This has some await axios.post() calls...
} catch { }
}
Merci. Quelque chose est venu dans mon esprit après. Si j'avais un autre tableau à l'intérieur du item.arr code>, l'approche d'un
d'une code> est-elle imbriquée?
Je vous en prie! Oui, s'il existe une matrice à l'intérieur d'un article de tableau et que vous devez appliquer une validation similaire - Netthed Certains code> peuvent être un moyen d'aller. Si le code devient surveillé avec cela, vous pouvez définir un rappel transmis à
quelques code> dans la portée extérieure (au lieu de la définir en ligne comme une fonction anonyme) afin d'améliorer la lisibilité.