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
Linda Hamiltonoriginal
2024-10-21 17:58:02445parcourir

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;
  });
}

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;
}

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);
  });
}

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.
});

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!

Déclaration:
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