Contrairement à d'autres langages de programmation, JavaScript n'a pas de méthode de veille intégrée. Vous ne pouvez donc pas simplement appeler une fonction sleep() pour mettre en pause un programme Node.js. Cependant, il existe d'autres façons de faire attendre un programme pendant une durée spécifiée.

Ce didacticiel présente trois approches: setTimeout, async/wait et le package sleep-promise.

Utilisation de setTimeout() pour attendre une heure spécifique

Le setTimeout() la fonction planifie le code pour que le runtime s'exécute une fois qu'un laps de temps défini s'est écoulé. Il accepte une fonction et un temps de retard en millisecondes. Voici la syntaxe :

setTimeout(une fonction(), tempsEnMs)

Par exemple, supposons que vous ayez une fonction qui imprime sur la console :

une fonctionprintPhrase() {
console.log("Utilisation de setTimeout()")
}

Pour exécuter la fonction ci-dessus après que deux secondes se soient écoulées, passez la fonction et le temps de retard de 2000 ms au setTimeout() une fonction:

instagram viewer
setTimeout (printSentence, 2000)

Bien que cela fonctionne, il n'est pas garanti que votre fonction s'exécutera exactement après deux secondes. Cela prendra certainement au moins ce temps, mais cela peut prendre plus.

Est-ce que setTimeout() est précis ?

Oui, mais avec quelques mises en garde. setTimeout() est un fonction JavaScript asynchrone ce qui signifie qu'il est non bloquant. Le code que vous planifiez est ajouté à la boucle d'événements pendant que le reste de votre programme se poursuit.

Une fois le délai écoulé, votre programme exécutera le code planifié, mais uniquement lorsqu'il est libre de le faire. Si un autre code se trouve dans la pile des appels, il s'exécutera en premier, même si le code planifié doit s'exécuter. C'est là qu'un délai supplémentaire peut se produire, d'où l'imprécision.

Considérez le programme suivant.

console.log("Bonjour le monde!")

une fonctionprintPhrase() {
console.log("Utilisation de setTimeout()")
}

setTimeout (printSentence, 2000)
console.log("Fait")

Voici ce que la console affichera lorsque vous l'exécuterez :

Bonjour le monde!
Fait
Utilisation de setTimeout()

Ce programme introduit un délai, mais il ne fait que retarder le code qu'il passe à setTimeout(). Le reste du programme se poursuit, le code programmé ne l'interrompant qu'une fois la durée écoulée. Si vous voulez exécuter tout ce code dans l'ordre, avec une pause au milieu, en utilisant setTimeout() ne fonctionnera pas.

Une alternative consiste à écrire du code synchrone qui bloquera l'exécution aussi longtemps que nécessaire. Par exemple, vous pouvez utiliser un faire pendant boucle pour bloquer le thread d'exécution jusqu'à ce que le temps de retard soit écoulé :

une fonctionretard(Mme) {
constante rendez-vous = Date.à présent();
laisser dateactuelle = nul;

faire {
dateactuelle = Date.à présent();
} pendant que (currentDate - date < ms);
}

console.log("Bonjour le monde");
retard (2000);
console.log("Sera imprimé après 2 secondes !");

Le retard() la fonction boucle jusqu'à ce que l'heure actuelle soit égale ou supérieure à son heure de début plus le retard. L'inconvénient de cette approche est qu'elle est gourmande en CPU, en particulier avec des retards importants. Le faire...en boucle doit calculer le temps restant après chaque milliseconde.

Utiliser Async/Await pour retarder un programme Node.js

Un attendre L'expression interrompt l'exécution jusqu'à ce qu'une promesse soit résolue. Il vous permet d'exécuter du code asynchrone comme s'il était synchrone, mais plus efficacement qu'en bloquant manuellement l'exécution. Vous ne pouvez utiliser await qu'à l'intérieur d'une fonction marquée asynchrone.

une fonctionretard(temps) {
retournerNouveauPromesse(resolve => setTimeout (resolve, time));
}

asynchroneune fonctionprintPhrase() {
console.log("Bonjour le monde")
attendre retard(2000);
console.log("Sera imprimé après 2 secondes");
}

printPhrase();

Voici la sortie du programme ci-dessus :

Bonjour le monde
Sera imprimé après 2 secondes

Utilisation du forfait promesse de sommeil

Le promesse de sommeil package simplifie le processus de mise en pause des programmes Node.js. Il vous suffit de l'appeler et de spécifier le temps de retard en millisecondes.

Commencez par l'installer via npm :

npm installersommeil-promesse

Voici un exemple de la façon dont vous pourriez l'utiliser dans votre programme :

constante dormir = exiger('sommeil-promesse');

(asynchrone () => {
console.log("Bonjour le monde.");
attendre sommeil(2000);
console.log("Sera imprimé après deux secondes.");
})();

Lorsque vous exécutez le programme, la sortie sera la suivante.

Bonjour le monde.
Sera imprimé après deux secondes.

Choisir une approche appropriée

L'implémentation d'une fonctionnalité de veille dans Node.js peut être délicate. Lorsque vous décidez comment vous y prendre, réfléchissez à ce que vous voulez accomplir. Si vous voulez juste retarder du code, pour un minimum de temps, setTimeout() est une bonne option. Mais si vous voulez interrompre l'exécution de tout votre programme, vous devez utiliser asynchrone/attendre.

Synchrone vs. Programmation asynchrone: en quoi sont-elles différentes ?

Lire la suite

PartagerTweeterPartagerE-mail

Rubriques connexes

  • Programmation
  • Développement web
  • Programmation
  • Javascript

A propos de l'auteur

Marie Gathoni (19 articles publiés)

Mary Gathoni est une développeuse de logiciels passionnée par la création de contenu technique non seulement informatif mais également engageant. Lorsqu'elle ne code pas ou n'écrit pas, elle aime passer du temps avec des amis et être à l'extérieur.

Plus de Mary Gathoni

Abonnez-vous à notre newsletter

Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !

Cliquez ici pour vous abonner