JS Attendre la callback avant de retourner le résultat d'une fct
yolo
-
yolo -
yolo -
Bonjour,
Je suis plutôt débutant en JS. Je souhaite attendre le résultat de la callback dans solrClient.search avant de retourner le résultat final. Sauf qu'en l'état actuel le retour se fait avant la fin du traitement dans les conditions définies dans la callback.
Voici le code associé :
NB: Javascript n'est pas JAVA ... la discussion est déplacée dans le bon forum !
Merci de votre aide !
Je suis plutôt débutant en JS. Je souhaite attendre le résultat de la callback dans solrClient.search avant de retourner le résultat final. Sauf qu'en l'état actuel le retour se fait avant la fin du traitement dans les conditions définies dans la callback.
Voici le code associé :
function updateMessage(input, response) {
response.output.text = "ceci est une mauvaise réponse";
if(!cond1){
return response;
} else {
query.q(input.input.text);
solrClient.search(query, function(err, searchResponse) {
if(err) {
console.log('Error searching for documents: ' + err);
}
else {
console.log('Found ' + searchResponse.response.numFound + ' documents.');
response.output.text('First document: ' + JSON.stringify(searchResponse.response.docs[0], null, 2));
}
});
}
return response;
}
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
NB: Javascript n'est pas JAVA ... la discussion est déplacée dans le bon forum !
Merci de votre aide !
2 réponses
-
Effectivement la "bonne manière" pour récupérer le résultat est d'appeler une autre fonction de callback qui sera passée en paramètre de ta première fonction, par exemple comme ceci :
function updateMessage(input, response, callback) { response.output.text = "ceci est une mauvaise réponse"; if(!cond1){ return response; } else { query.q(input.input.text); solrClient.search(query, function(err, searchResponse) { if(err) { console.log('Error searching for documents: ' + err); } else { console.log('Found ' + searchResponse.response.numFound + ' documents.'); response.output.text('First document: ' + JSON.stringify(searchResponse.response.docs[0], null, 2)); } callback(response); }); } }
Dans ce cas, l'appel à ta fonction ne se fait pas comme ceci :var returnResponse = updateMessage(input, response);
mais comme ceci :updateMessage(input, response, function(resturnResponse) { // on peut utiliser ici la retour de la recherche : returnResponse });
Source : https://stackoverflow.com/questions/5010288/how-to-make-a-function-wait-until-a-callback-has-been-called-using-node-js
Une autre solution qui semble correspondre exactement à ton problème en utilisant les "promises" : https://stackoverflow.com/questions/26566535/nodejs-solrclient-how-to-wait-for-response -
Salut,
Et en déplancant le "return response;" à la fin de la fonction de callback ?
Bonne journée,