J'ai cherché un peu partout la réponse à ce problème apparemment simple, mais je n'ai trouvé que des réponses plutôt compliquées impliquant des classes, des gestionnaires d'événements et des callbacks (qui me semblent être une approche un peu brutale). Je pense que les callbacks peuvent être utiles mais je n'arrive pas à les appliquer dans le contexte le plus simple. Voir cet exemple :
<html>
<head>
<script type="text/javascript">
function myfunction() {
longfunctionfirst();
shortfunctionsecond();
}
function longfunctionfirst() {
setTimeout('alert("first function finished");',3000);
}
function shortfunctionsecond() {
setTimeout('alert("second function finished");',200);
}
</script>
</head>
<body>
<a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
</body>
</html>
Dans ce cas, la deuxième fonction s'achève avant la première ; quelle est la manière la plus simple (ou en existe-t-il une ?) de forcer la deuxième fonction à retarder son exécution jusqu'à ce que la première fonction soit terminée ?
---Edit---
Merci pour toutes les réponses si rapides !
C'était donc un mauvais exemple, mais grâce à David Hedlund, je vois avec ce nouvel exemple que c'est effectivement synchrone (et que mon navigateur s'est planté pendant le processus de test !)
<html>
<head>
<script type="text/javascript">
function myfunction() {
longfunctionfirst();
shortfunctionsecond();
}
function longfunctionfirst() {
var j = 10000;
for (var i=0; i<j; i++) {
document.body.innerHTML += i;
}
alert("first function finished");
}
function shortfunctionsecond() {
var j = 10;
for (var i=0; i<j; i++) {
document.body.innerHTML += i;
}
alert("second function finished");
}
</script>
</head>
<body>
<a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
</body>
</html>
Comme mon problème RÉEL était avec jquery et IE, je vais devoir poster une question séparée à ce sujet si je ne peux pas obtenir quelque chose moi-même !
0 votes
J'espère que cela vous sera utile github.com/dineshkani24/queuecall
0 votes
Je suis content que ce ne soit pas moi qui doive lutter contre ça. J'ai commencé à utiliser nodejs pour le traitement des fichiers de logs. Tout dans ce traitement impose un fonctionnement séquentiel, mais j'ai passé tellement de temps à essayer de forcer les séquences requises. Je trouve qu'avec les promesses et tout l'enchaînement de "puis ceci" "puis cela", on se retrouve avec un code illisible.