Maison >base de données >tutoriel mysql >Comment synchroniser les requêtes MySQL avec Async/Await dans Node.js ?

Comment synchroniser les requêtes MySQL avec Async/Await dans Node.js ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-30 04:41:19963parcourir

How to Synchronize MySQL Queries with Async/Await in Node.js?

Synchronisation des requêtes MySQL avec Async/Await dans Node.js

Dans Node.js, les mots-clés async/await permettent au code asynchrone de être écrit de manière synchrone. Pour les opérations de base de données, telles que les requêtes MySQL, cela peut être particulièrement utile pour garantir que tous les résultats sont obtenus avant de continuer.

Défi : requêtes asynchrones

Considérez le code suivant extrait de code, qui tente de récupérer plusieurs résultats de base de données et de les ajouter à une chaîne :

var string1 = '';
var string2 = '';
var string3 = '';
var string4 = '';

DatabasePool.getConnection(function(err, connection) {

        connection.query(query,function (err, result) {
            if (err){};
            string1 = result;
        });

        connection.query(query,function (err, result) {
            if (err){};
            string2 = result;
        });     

        connection.query(query,function (err, result) {
            if (err){};
            string3 = result;   
        });

        connection.query(query,function (err, result) {
            if (err){};
            string4 = result;
        }); 

       //I need to append all these strings to appended_text but  
       //all variables remain blank because below code runs first.
       var appended_text = string1 + string2 + string3 + string4;
});

Dans ce code, chaque requête est exécutée de manière asynchrone, conduisant à un comportement indéfini pour la variable appended_text. Pour résoudre ce problème, Node.js 8 introduit une fonctionnalité puissante.

Solution : Promesse avec Async/Await

Pour synchroniser les requêtes à l'aide de async/await, vous pouvez exploitez la fonction native util.promisify() en conjonction avec le module mysql du nœud. Voici un exemple :

const mysql = require('mysql');
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    // Execute your queries sequentially using await
    const rows1 = await query('select count(*) as count from file_managed');
    const rows2 = await query('select count(*) as count from file_managed');
    const rows3 = await query('select count(*) as count from file_managed');
    const rows4 = await query('select count(*) as count from file_managed');

    // Append the results to the appended_text variable
    var appended_text = rows1.count + rows2.count + rows3.count + rows4.count;

    console.log(appended_text);
  } finally {
    conn.end();
  }
})();

Dans ce code :

  1. Vous promettez d'abord la méthode de requête de la connexion pour renvoyer une promesse.
  2. Au sein de la fonction asynchrone, vous exécutez vos requêtes de manière séquentielle et attendez leurs résultats.
  3. Enfin, vous pouvez ajouter les résultats au appended_text variable de manière synchronisée.

L'utilisation de async/await avec le nœud mysql simplifie la synchronisation des requêtes de base de données, permettant un code plus lisible et maintenable.

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