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 !
A voir également:
- JS Attendre la callback avant de retourner le résultat d'une fct
- Retourner ecran pc - Guide
- Comment retourner une video - Guide
- Resultat foot - Télécharger - Vie quotidienne
- Avant browser - Télécharger - Navigateurs
- Copains d'avant qui a visité mon profil - Forum Facebook
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 :
Dans ce cas, l'appel à ta fonction ne se fait pas comme ceci :
mais comme ceci :
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
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
yolo
J'ai le même problème, le return est considéré comme étant celui de fonction search et non updateMessage