최근 다음 다층 중첩 콜백 필요 (즉, 쿼리가 다른 테이블의 결과를 확인하기 위해 표를 사용) 논리 링크에게 Node.js를 표 MySQL의 쿼리를 포함하는 후단을 기록. 문제가되고 그래서, 다중 중첩 콜백 함수 문제 "콜백 지옥"을해야합니다, 코드 구조는 매우 추한이며, 약속 및 솔루션 비동기는 "콜백 지옥"및 생산을 해결하는 것입니다. 나는 약속을 선택했지만 발생 코드 구조에서 몇 가지 문제를, 그리고 족장의지도가 해결을 통해 마지막으로, 본인 기록합니다.
먼저 (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 ()가 다음, 이해 () 메소드가 약속 개체를 반환 한 다음 () 메소드 자체는 비동기 아니며, 실제 비동기 함수가 반환에 배치해야하므로, 비동기 콜백을 듣지 않았다 약속 개체 및 모니터에 약속이 해결됩니다 개체 () 메소드는 비동기 실행을 구현합니다.