Maison >interface Web >js tutoriel >Comment résoudre l'attente de rappel et le blocage dans Node.js ?

Comment résoudre l'attente de rappel et le blocage dans Node.js ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 17:50:44665parcourir

How to Solve Callback Waiting and Blocking in Node.js?

En attente de rappels dans Node.js

Node.js, étant une plate-forme événementielle, encourage la programmation asynchrone, où les fonctions peuvent lancer des actions et continuer à s'exécuter sans attendre pour la réalisation de l'action. Cependant, il peut y avoir des scénarios dans lesquels vous souhaitez qu'une fonction attende qu'un rappel soit invoqué avant de renvoyer une valeur.

Considérez l'extrait de code suivant qui vise à effectuer un appel synchrone à l'aide de la méthode myApi.exec, qui accepte un rappel pour gérer la réponse :

function(query) {
  myApi.exec('SomeCommand', function(response) {
    return response;
  });
}

Bien que l'intention soit de renvoyer la réponse reçue du rappel, ce code ne fonctionnera pas correctement et reviendra immédiatement, avant que le rappel ne soit exécuté.

Pour résoudre ce problème, Node.js adopte l'approche basée sur les événements, dans laquelle les fonctions ne doivent pas bloquer les résultats de rappel. Au lieu de cela, ils doivent accepter un paramètre de rappel et l'appelant doit fournir une fonction pour gérer le résultat.

La bonne façon d'écrire cette fonction est :

function(query, callback) {
  myApi.exec('SomeCommand', function(response) {
    // Additional processing...
    callback(response); // "Returning" the response via the callback
  });
}

De cette façon, la fonction devient non bloquant et ne retournera aucune valeur tant que le rappel n'est pas exécuté. L'appelant doit l'utiliser comme suit :

myFunction(query, function(returnValue) {
  // Handle the return value here
});

Cette approche basée sur les événements favorise la programmation asynchrone et empêche le blocage, ce qui est crucial pour des performances efficaces dans les applications 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