{if(token){getScenario().then(({scenarios} ) =>{console.log("3&q"> Incohérent avec l'ordre d'exécution des instructions wait-Questions et réponses sur le réseau chinois PHP
Incohérent avec l'ordre d'exécution des instructions wait
P粉691461301
P粉691461301 2023-09-12 13:42:02
0
1
459

J'ai rencontré un comportement inattendu dans la séquence d'exécution de mon code. Voici l'extrait de code :

console.log("1"); await reloadScenarios(); console.log("2"); const reloadScenarios = () => { if (token) { getScenario() .then(({ scenarios }) => { console.log("3"); const transformedScenarios = scenarios.map(option => ({ scenario: option.name, description: option.categories.name, value: option._id })); setOptions(transformedScenarios); // setSelectedOption(transformedScenarios[0]?.value || null); }) .catch((error) => { console.error('Failed to fetch scenario options:', error); }); } };

Je m'attends à ce que l'ordre d'exécution soit 1,3,2. Cependant, lorsque j'exécute le code, l'ordre réel est 1,2,3. Quelqu'un peut-il expliquer pourquoi cela se produit ?

De plus, j'ai remarqué que lorsque j'ai modifié la fonction reloadScenarios pour inclure une instruction return avant getScenario(), l'ordre d'exécution est passé à 1, 3, 2 - qui est l'ordre souhaité. Ai-je vraiment besoin d'une instruction return ou existe-t-il une autre explication pour obtenir la séquence souhaitée ?

P粉691461301
P粉691461301

répondre à tous (1)
P粉019353247

Votre problème est que vous utilisez wait pour appeler une fonction qui n'est pas asynchrone et ne renvoie pas de promesse. Puisque la fonction ne renvoie pas de promesse, l'exécution continue.

Si vous souhaitez que la séquence affichée soit "1,3 2" alors vous devez marquer votre fonction avecasync

const reloadScenarios = async () => { // Your body function };

De cette façon, lorsque vous marquezawait reloadScenarios, vous attendez que la promesse soit résolue (ou rejetée).

Pour plus de détails, consultez la documentation :https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

ModifierDésolé j'oubliais, encore un problème : il faut aussi retourner la promesse dans la fonction

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!