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