Salut !
Je me demande, en général, comment identifie t'on si l'appel d'une fonction d'un module se fait de manière synchrone ou asynchrone ?
Salut !
Je me demande, en général, comment identifie t'on si l'appel d'une fonction d'un module se fait de manière synchrone ou asynchrone ?
Ubuntu fan depuis la 8.04
monnaie libre
Bonjour,
Ce lien devrait répondre à tes questions
Si débugger est l'art de corriger les bugs, alors programmer est l'art d'en créer.
merci arthur57 !!! je commence à voir plus clair !!!
Ubuntu fan depuis la 8.04
monnaie libre
Bon je rame un peu.
je n'ai pas de garantie d'avoir le résultat de ma requete à la fin de ma fonction... donc je génère un événement ? ou alors je place des await ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 function check_login(json_, socket_) { let con = mysql.createConnection(options); con.on('error', function(error_) { console.error("connection error ", error_); }); con.connect(function(error_) { if(error_) console.log("connect error : ", error_); }); let query = "SELECT count(*) as num FROM user"; console.log("query : ", query); con.query(query, function(error_, result_, fields_) { if(error_) { console.error("query error ", error_.code); return; } const count = result_[0].num; }); con.end(); };
Ubuntu fan depuis la 8.04
monnaie libre
Je ne connais pas cette API mais de ce que je comprends du code et de comment il s'organise tu as de grandes chances de fermer ta connexion avant même d'avoir reçu le résultat de ta requête.
Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.
"Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
Kenneth E. Boulding
"Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
Jean-Baptiste Say, Traité d'économie politique, 1803.
"/home/earth is 102% full ... please delete anyone you can."
Inconnu
J'ai peut être mal saisi le rôle de cette fonction end()Terminating connections
There are two ways to end a connection. Terminating a connection gracefully is done by calling the end() method:
connection.end(function(err) {
// The connection is terminated now
});
This will make sure all previously enqueued queries are still before sending a COM_QUIT packet to the MySQL server. If a fatal error occurs before the COM_QUIT packet can be sent, an err argument will be provided to the callback, but the connection will be terminated regardless of that.
source : https://github.com/mysqljs/mysql#ter...ng-connections
Every method you invoke on a connection is queued and executed in sequence.
Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.
source : https://github.com/mysqljs/mysql#introduction
Ubuntu fan depuis la 8.04
monnaie libre
Bon, j'avance à petit pas, pas simple quand on viens du C++
Ubuntu fan depuis la 8.04
monnaie libre
Ok, j'ai rien dit, la fonction end attends la fin de l'exécution de toutes les requêtes en attente
Pour ta problématique initiale, il s'agit en fait de savoir comment récupérer la valeur de count dans l'appelant si je comprends bien ?
Premier point, la connexion devrait être ouverte et fermée en dehors de cette fonction. Généralement on ouvre la connexion à la base de données au démarrage de l'appli et on la ferme lors de la fermeture de l'appli. On n'exécute pas ouverture / fermeture de connexion à chaque requête c'est bien trop couteux.
Ta connexion active doit donc être injectée à la fonction implémentant la requête.
Comme le but est de retourner à l'appelant de ta fonction la valeur ramenée par la requête et qu'on est dans un contexte asynchrone il te faut utiliser les promesses. Ta fonction doit retourner une promesse qui "résout" le résultat de la base donnée dans le callback de la fonction query de ta connexion active.
Je t'invite dans l'immédiat à ignorer async / await et à commencer à travailler avec les promesses. C'est la brique de base pour travailler sur de l'asynchrone en JavaScript (client ou serveur), cela fait partie intégrante de la norme ES2015 et c'est donc disponible en natif dans Node.js depuis un certain temps, ce n'est pas documenté par l'API node car ce n'est pas fourni par l'API node mais par le langage JavaScript lui-même (par le moteur d'exécution V8 en fait).
Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.
"Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
Kenneth E. Boulding
"Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
Jean-Baptiste Say, Traité d'économie politique, 1803.
"/home/earth is 102% full ... please delete anyone you can."
Inconnu
merci Marco !!
Ubuntu fan depuis la 8.04
monnaie libre
donc le chaînage de promesses permet de capturer les throw avec un .catch() ?!?!
Ubuntu fan depuis la 8.04
monnaie libre
Oui regarde les exemples de la MDN.
Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.
"Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
Kenneth E. Boulding
"Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
Jean-Baptiste Say, Traité d'économie politique, 1803.
"/home/earth is 102% full ... please delete anyone you can."
Inconnu
merci et j'ai trouvé ça aussi : https://codeburst.io/node-js-mysql-a...s-4c3be599909b
Ubuntu fan depuis la 8.04
monnaie libre
Bon, je maîtrise mieux les Promise mais pour une facilité d'écriture et de relecture de mon code j'opte pour une utilisation du couple async/await, exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 // mysql_tools // //////////////////////////////////////////////////////////////////////////////// function query(sql_, args_) { return new Promise(function(resolve_, reject_) { mysql_connection.query(sql_, args_, function(err_, rows_) { if(err_) return reject_(err_); resolve_(rows_); }); }); };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 async function demo() { try { let result = await mysql_tools.query("SELECT count(*) as num FROM truc"); } catch(err_) { // ici on va "attrapper" un eventuel reject... } };
Ubuntu fan depuis la 8.04
monnaie libre
et pour appuyer mon dernier post : https://blog.xebia.fr/2017/11/14/asy...en-javascript/
Ubuntu fan depuis la 8.04
monnaie libre
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager