Exécution asynchrone dans Node.js : utilisation d'Async/Await avec MySQL
En tant que nouveau venu dans Node.js, vous pouvez rencontrer des difficultés à vous adapter sa syntaxe moderne, en particulier lorsque vous travaillez avec des opérations asynchrones. Explorons comment utiliser les mots-clés async/await pour obtenir des résultats synchronisés lors de l'interrogation d'une base de données MySQL.
Dans votre code, vous souhaitez exécuter plusieurs requêtes et concaténer les résultats en une seule chaîne. Cependant, comme Node.js exécute le code JavaScript de manière non bloquante, le code ci-dessous ne garantit pas que les variables string1 à string4 contiendront les résultats attendus :
// Original Code var string1 = ''; var string2 = ''; var string3 = ''; var string4 = ''; DatabasePool.getConnection((err, connection) => { // Query 1 connection.query(query, (err, result) => { string1 = result; }); // Query 2 connection.query(query, (err, result) => { string2 = result; }); // Query 3 connection.query(query, (err, result) => { string3 = result; }); // Query 4 connection.query(query, (err, result) => { string4 = result; }); // Attempt to concatenate results var appended_text = string1 + string2 + string3 + string4; });
Solution avec Async/ Attendre
Pour résoudre ce problème et permettre une exécution synchrone, Node.js 8 fournit la fonction util.promisify(). Voici comment l'intégrer à la bibliothèque MySQL :
// Improved Code const mysql = require('mysql'); const util = require('util'); const conn = mysql.createConnection({ yourHOST, yourUSER, yourPW, yourDB }); // Promisify the query method const query = util.promisify(conn.query).bind(conn); (async () => { try { // Execute queries concurrently const [query1Result, query2Result, query3Result, query4Result] = await Promise.all([ query('select count(*) as count from file_managed'), query('another query'), query('another query'), query('another query'), ]); // Concatenate results const appended_text = query1Result[0].count + query2Result[0].count + query3Result[0].count + query4Result[0].count; } finally { // Close the connection conn.end(); } })();
Dans ce code révisé :
Cette approche vous permet de synchronisez de manière transparente vos requêtes et obtenez le résultat souhaité de manière fiable, faisant de async/wait un outil puissant pour gérer les opérations asynchrones 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!