Maison > interface Web > js tutoriel > Comment suspendre les fonctions Node.js pour les rappels dans la programmation pilotée par événements ?

Comment suspendre les fonctions Node.js pour les rappels dans la programmation pilotée par événements ?

Linda Hamilton
Libérer: 2024-10-21 17:58:02
original
448 Les gens l'ont consulté

How to Pause Node.js Functions for Callbacks in Event-Driven Programming?

Exécution de fonctions événementielles dans Node.js : attente de rappels

Dans le contexte de la programmation événementielle, il est souvent nécessaire de exécuter des routines qui dépendent de l'achèvement de tâches asynchrones. Dans Node.js, les rappels sont fréquemment utilisés pour gérer de telles tâches. Cependant, il existe des cas où il est souhaitable de "mettre en pause" une fonction jusqu'à ce qu'un rappel ait été invoqué.

Considérons une fonction simplifiée :

function(query) {
  myApi.exec('SomeCommand', function(response) {
    return response;
  });
}
Copier après la connexion

Cette fonction vise à renvoyer la réponse du Appel myApi.exec(). Cependant, l'implémentation ne fonctionne pas comme prévu car Node.js revient immédiatement avant l'exécution du rappel.

Une tentative naïve de résoudre ce problème pourrait impliquer l'utilisation d'une boucle while :

function(query) {
  var r;
  myApi.exec('SomeCommand', function(response) {
    r = response;
  });
  while (!r) {}
  return r;
}
Copier après la connexion

Cette approche est inefficace, car elle introduit un blocage de code et entrave la nature événementielle de Node.js.

La méthode Node.js : adoptez les rappels

La La meilleure solution dans ce scénario est d'exploiter le modèle de rappel et d'éviter de bloquer l'exécution. Au lieu d'attendre une valeur de retour, votre fonction doit accepter un paramètre de rappel qui sera invoqué une fois l'opération terminée :

function(query, callback) {
  myApi.exec('SomeCommand', function(response) {
    // Do additional processing if necessary...
    callback(response);
  });
}
Copier après la connexion

Cette approche vous permet d'exécuter des tâches asynchrones sans attendre leur achèvement. L'appelant ne doit pas s'attendre à une valeur de « retour » au sens traditionnel mais plutôt spécifier une routine pour gérer les données résultantes :

myFunction(query, function(returnValue) {
  // Use the return value here.
});
Copier après la connexion

En adhérant à ce modèle, votre code reste non bloquant et piloté par les événements. , garantissant une exécution efficace dans Node.js.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal