>데이터 베이스 >MySQL 튜토리얼 >Node.js에서 MySQL 쿼리를 Async/Await와 동기화하는 방법은 무엇입니까?

Node.js에서 MySQL 쿼리를 Async/Await와 동기화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-30 04:41:19963검색

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

Node.js의 Async/Await와 MySQL 쿼리 동기화

Node.js에서 async/await 키워드는 비동기 코드를 허용합니다. 동기식으로 작성됩니다. MySQL 쿼리와 같은 데이터베이스 작업의 경우 이는 계속하기 전에 모든 결과를 얻는 데 특히 유용할 수 있습니다.

도전 과제: 비동기 쿼리

다음 코드를 고려하세요. 여러 데이터베이스 결과를 검색하여 문자열에 추가하려고 시도하는 코드 조각:

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;
});

이 코드에서 각 쿼리가 비동기식으로 실행되어appended_text 변수에 대해 정의되지 않은 동작이 발생합니다. 이 문제를 해결하기 위해 Node.js 8에는 강력한 기능이 도입되었습니다.

해결책: Async/Await를 사용한 약속

async/await를 사용하여 쿼리를 동기화하려면 다음을 수행하세요. 노드 mysql 모듈과 함께 기본 util.promisify() 함수를 활용합니다. 예는 다음과 같습니다.

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();
  }
})();

이 코드에서는

  1. 먼저 Promise를 반환하도록 연결의 쿼리 메서드를 약속합니다.
  2. 비동기 함수 내에서 쿼리를 순차적으로 실행하고 결과를 기다립니다.
  3. 마지막으로 결과를 다음에 추가할 수 있습니다. 추가된_text 변수를 동기화된 방식으로 처리합니다.

mysql 노드와 함께 async/await를 사용하면 데이터베이스 쿼리 동기화가 단순화되어 코드를 더 쉽게 읽을 수 있고 유지 관리할 수 있습니다.

위 내용은 Node.js에서 MySQL 쿼리를 Async/Await와 동기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.