à l'aide de setTimeout de manière synchrone en JavaScript
J'ai le scénario suivant:
setTimeout("alert('this alert is timedout and should be the first');", 5000);
alert("this should be the second one");
J'ai besoin le code après le setTimeout
à être exécuté après le code dans le setTimeout est exécutée. Depuis que le code qui vient après le setTimeout
n'est pas le code de mon propre je ne peux pas le mettre dans la fonction appelée dans le setTimeout...
Est-il un moyen de contourner cela?
Vous devez vous connecter pour publier un commentaire.
Est le code contenu dans une fonction?
Dans ce cas, vous pouvez empêcher la fonction de poursuite de l'exécution, puis exécutez-le à nouveau:
Je suis venu dans une situation où j'avais besoin d'une fonctionnalité similaire la semaine dernière et il m'a fait penser à ce post. Fondamentalement, je pense que le "Occupé Attente" à laquelle @AndreKR se réfère, serait une solution appropriée dans beaucoup de situations. Ci-dessous le code que j'ai utilisé à de porc sur le navigateur et la force d'une condition d'attente.
JS:
Gardez à l'esprit que ce code acutally détient les paramètres de votre navigateur.
Espérons que cela aide quelqu'un.
Il suffit de le mettre à l'intérieur de la fonction de rappel:
setTimeout
?setTimeout
si toujours asynchrone.Pas, comme il n'y a pas de délai de fonction en Javascript, il n'existe aucun moyen pour ce faire d'autre que occupé attente (ce qui serait verrouiller le navigateur).
var until = new Date().getTime() + 3000; while(new Date().getTime() < until) {}; alert('3 seconds passed');
ES6 (occupé attente)
utilisation:
À l'aide de ES6 & les promesses & async vous pouvez obtenir des choses en cours d'exécution synchrone.
Donc, qu'est-ce que le code fait?
Vous pouvez tenter de remplacer la fenêtre.setTimeout avec votre propre fonction, comme
Qui peut ou peut ne pas fonctionner correctement à tous. En plus de cela, votre seule option serait de changer le code d'origine (qui vous dit que vous ne pouvait pas le faire)
Garder à l'esprit, l'évolution des fonctions natives comme ce n'est pas exactement la meilleure approche.