Node.jsの約束非同期実行MySQLのクエリ

最近論理のNode.jsを表MySQLのクエリを(すなわち、Aクエリ別のテーブルの結果を確認するために、テーブルを使用して)架橋を伴う後端部を、書き込まれ、その後、ネストされた多層コールバックを必要とします。質問はなった、マルチネストされたコールバック関数が問題、「コールバック地獄」を持つことになりますので、コードの構造は非常に醜いです、と約束してソリューションの非同期は、「コールバック地獄」と生産を解決することです。私は約束を選んだが、コードの構造にいくつかの問題に遭遇し、そして最終的には首長の指導により解決され、ここレコード。

あなたは、まず(MySQLがインストール前提の下で)のmysqlモジュールをインストールする必要があります。

npm install -s mysql

次に、(ここでは私のミス、コードで正しい後でます)を実行します。

/*
 注意这是一段错误的代码
*/
const mysql = require('mysql');
// 建立连接
let connection = mysql.createConnection({
  host: '127.0.0.1', // 数据库地址
  port: '3306', // 数据库端口
  user: 'root', // 用户名
  password: '', // 密码
  database: '' // 数据库名称
});
// Promise异步执行
let prom = Promise.resolve();
prom.then(function () {
  // 执行查询
  connection.query('SELECT * FROM users_table;', (e, result) => { // 这里users_table是我的表名,请读者自行替换
    console.log('Search complete!');
    if (e) {
      throw e;
    }
    connection.end(); // 关闭连接,否则程序不会自动退出
    return Promise.resolve(result);
  });
})
  .then(function (data) {
    console.log('Search result: ', data);
  });

出力:

Search result:  undefined
Search complete!

見ることができ、その後、()メソッドは、その次の段階に入り、非同期実行を約束、プログラムが既に実装されていることを約束し、監視されていない説明のMySQL、実行し、結果のmysqlを戻します。

次のように継続的な学習の約束した後、正しいコードを取得することを約束非同期実行は次のとおりです。

const mysql = require('mysql');
// 建立连接
let connection = mysql.createConnection({
  host: '127.0.0.1', // 数据库地址
  port: '3306', // 数据库端口
  user: 'root', // 用户名
  password: '', // 密码
  database: '' // 数据库名称
});
// Promise异步执行
let prom = Promise.resolve();
prom.then(function () {
  // 执行查询
  return new Promise(resolve => {
    connection.query('SELECT * FROM users_table;', (e, result) => { // 这里users_table是我的表名,请读者自行替换
      console.log('Search complete!');
      if (e) {
        throw e;
      }
      connection.end(); // 关闭连接,否则程序不会自动退出
      resolve(result);
    });
  });
})
  .then(function (data) {
    console.log('Search result: ', data);
  });

結果:

Search complete!
Search result:  [
  // some data
]

正常に実行されました。

要約反射した後、私は(Promise.thenを理解する)である場合、()メソッドは、プロミスオブジェクトを返し、その後、()メソッド自体は非同期ではなく、本当の非同期関数は、戻り値の上に配置する必要がありますので、非同期コールバックを聞きませんでしたプロミスオブジェクト、およびオブジェクトの約束は、非同期実行を実装し、モニターに()メソッドを解決します。

公開された19元の記事 ウォンの賞賛0 ビュー1419

おすすめ

転載: blog.csdn.net/Z_ammo/article/details/103802234