Node.js를 약속 비동기 실행 MySQL의 쿼리

최근 다음 다층 중첩 콜백 필요 (즉, 쿼리가 다른 테이블의 결과를 확인하기 위해 표를 사용) 논리 링크에게 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 ()가 다음, 이해 () 메소드가 약속 개체를 반환 한 다음 () 메소드 자체는 비동기 아니며, 실제 비동기 함수가 반환에 배치해야하므로, 비동기 콜백을 듣지 않았다 약속 개체 및 모니터에 약속이 해결됩니다 개체 () 메소드는 비동기 실행을 구현합니다.

게시 19 개 원래 기사 · 원의 칭찬 0 · 조회수 1419

추천

출처blog.csdn.net/Z_ammo/article/details/103802234