Node-mysql非同期操作を実現(下)


前回のnode-mysql実装非同期操作(上)について、非同期操作の方法について説明しました.この文章では、node-mysqlというライブラリをカプセル化する方法の基本的な使用について説明します.
mysqlライブラリのダウンロード
https://github.com/mysqljs/mysql
npm install mysql --save

きほんしよう
公式githubからの例です
//     
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db'
});

//   mysql
connection.connect();

//      
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

//     
connection.end();

例では,データベースに対して操作を行った後,得られた結果はすべてコールバック関数で用いられ,これは通常の操作に合わないことがわかる.コールバック関数で直接return結果を得て,変数で直接この結果を得ることを望んでいる.
構想
Promiseオブジェクトのresolveパラメータを用いてコールバック関数では,データベース操作の結果resultsを取得し,この結果resolveを取り出し,async関数ではPromiseオブジェクトからデータを取り出すことができる.
コード実装
const mysql = require('mysql');

const find = async () => {
    const connection = await mysql.createConnection({
        host: '',
        port: '',
        user: '',
        password: '',
        database: '',
    });
    await connection.connect();
    return new Promise((resolve, reject) => {
        connection.query('SELECT * from tablename', 
        (error,results, fields) => {
            resolve(results);
        })
    })
}

(getData = async () => {
    console.log(await find())
})()