Hướng dẫn is mysql query asynchronous? - truy vấn mysql có đồng bộ không?

Tôi cần phải có tất cả các kết quả được đồng bộ hóa và nối vào một chuỗi với các từ khóa ASYNC/AIDIT như C#.

Tôi mới sử dụng Node.js và tôi không thể điều chỉnh cú pháp mới này với mã của mình.

var string1 = '';
var string2 = '';
var string3 = '';
var string4 = '';

DatabasePool.getConnection(function(err, connection) {

        connection.query(query,function (err, result) {
            if (err){};
            string1 = result;
        });

        connection.query(query,function (err, result) {
            if (err){};
            string2 = result;
        });     

        connection.query(query,function (err, result) {
            if (err){};
            string3 = result;   
        });

        connection.query(query,function (err, result) {
            if (err){};
            string4 = result;
        }); 

       //I need to append all these strings to appended_text but  
       //all variables remain blank because below code runs first.
       var appended_text = string1 + string2 + string3 + string4;
});

Hướng dẫn is mysql query asynchronous? - truy vấn mysql có đồng bộ không?

Đã hỏi ngày 16 tháng 5 năm 2017 lúc 14:34May 16, 2017 at 14:34May 16, 2017 at 14:34

2

Nếu bạn tình cờ ở Node 8+, bạn có thể tận dụng

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
2 bản địa với nút MySQL.8+, you can leverage the native
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
2 with the node mysql.8+, you can leverage the native
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
2 with the node mysql.

Đừng quên gọi nó bằng

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
3 vì vậy
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
4 sẽ không gây rối:
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()

Đã trả lời ngày 4 tháng 8 năm 2018 lúc 23:22Aug 4, 2018 at 23:22Aug 4, 2018 at 23:22

Leon - Han Lileon - Han LiLeOn - Han LiLeOn - Han Li

8.6921 Huy hiệu vàng62 Huy hiệu bạc55 Huy hiệu Đồng1 gold badge62 silver badges55 bronze badges1 gold badge62 silver badges55 bronze badges

6

Sử dụng gói MySQL2. Nó có trình bao bọc hứa hẹn để bạn có thể làm điều đó:

async function example1 () {
  const mysql = require('mysql2/promise');
  const conn = await mysql.createConnection({ database: test });
  let [rows, fields] = await conn.execute('select ?+? as sum', [2, 2]);
}

Đã trả lời ngày 13 tháng 11 năm 2017 lúc 10:43Nov 13, 2017 at 10:43Nov 13, 2017 at 10:43

mr_squallmr_squallmr_squallmr_squall

2.09720 Huy hiệu bạc19 Huy hiệu đồng20 silver badges19 bronze badges20 silver badges19 bronze badges

5

Giả sử rằng ORM của bạn rằng bạn đang sử dụng nó dựa trên lời hứa, bạn có thể làm điều gì đó như thế này

async function buildString() {
  try {
    const connection = await DatabasePool.getConnection();
    const string1 = await connection.query(query);
    const string2 = await connection.query(query);
    const string3 = await connection.query(query);
    const string4 = await connection.query(query);

    return string1 + string2 + string3 + string4;
  } catch (err) {
    // do something
  }
}

Bất kỳ lời hứa nào cũng có thể được sử dụng với ASYNC/AIDIT bằng cách đặt

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
5 trước cuộc gọi. Tuy nhiên, lưu ý rằng chức năng này phải được sử dụng trong chức năng "trình bao bọc"
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
6. Bạn cần xử lý các lỗi trong các khối
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
7.

Tôi cũng muốn chỉ ra rằng 4 truy vấn này không được chạy mô phỏng. Bạn vẫn cần sử dụng Promise. Tất cả cho điều đó.not run simulatneously. You'll still need to use Promise.all for that.not run simulatneously. You'll still need to use Promise.all for that.

Đã trả lời ngày 16 tháng 5 năm 2017 lúc 14:47May 16, 2017 at 14:47May 16, 2017 at 14:47

adam-beckadam-beckadam-beckadam-beck

5.4014 Huy hiệu vàng18 Huy hiệu bạc34 Huy hiệu đồng4 gold badges18 silver badges34 bronze badges4 gold badges18 silver badges34 bronze badges

5

Nếu bạn muốn sử dụng MySQL (còn gọi là MySQLJS), bạn phải làm một chút công việc nếu bạn không muốn sử dụng trình bao bọc. Nhưng nó đủ dễ dàng. Đây là cách hàm kết nối sẽ như thế nào:

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
1

Như bạn có thể thấy chờ đợi sẽ biết cách xử lý một lời hứa. Bạn tạo như vậy và sử dụng các chức năng giải quyết/từ chối trong triển khai gọi lại. Đó là tất cả những gì có, thực sự, vì vậy sử dụng trình bao bọc có thể hơi nhiều trừ khi bạn truy cập cơ sở dữ liệu của mình rất nhiều.

Đã trả lời ngày 14 tháng 12 năm 2018 lúc 20:56Dec 14, 2018 at 20:56Dec 14, 2018 at 20:56

Alexis WilkeAlexis WilkeAlexis WilkeAlexis Wilke

Phù hiệu vàng 18K1079 Huy hiệu bạc140 Huy hiệu đồng10 gold badges79 silver badges140 bronze badges10 gold badges79 silver badges140 bronze badges

Hoặc sử dụng mysql-async-simple

https://www.npmjs.com/package/mysql-async-simple

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
2

Đã trả lời ngày 9 tháng 10 năm 2020 lúc 3:04Oct 9, 2020 at 3:04Oct 9, 2020 at 3:04

HashhashHashHash

8016 Huy hiệu bạc19 Huy hiệu đồng6 silver badges19 bronze badges6 silver badges19 bronze badges

Bạn có thể sử dụng gói

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
8 như vậy:
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
4

Đã trả lời ngày 25 tháng 11 năm 2020 lúc 11:18Nov 25, 2020 at 11:18Nov 25, 2020 at 11:18

Như đã nêu bởi Leon - Han Li, tôi bao gồm các sửa đổi nhỏ, vì tôi phải làm việc với kết quả.

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
5

Đã trả lời ngày 11 tháng 12 năm 2020 lúc 14:29Dec 11, 2020 at 14:29Dec 11, 2020 at 14:29

Dixoendixoendixoendixoen

3354 Huy hiệu bạc12 Huy hiệu Đồng4 silver badges12 bronze badges4 silver badges12 bronze badges

Bạn sẽ phải đảm bảo rằng thư viện MySQL bạn đang sử dụng các lời hứa hỗ trợ, được yêu cầu bởi ____ 16/________ 15 hoặc sử dụng một công cụ như

async function example1 () {
  const mysql = require('mysql2/promise');
  const conn = await mysql.createConnection({ database: test });
  let [rows, fields] = await conn.execute('select ?+? as sum', [2, 2]);
}
1 của Bluebird để bọc thư viện.
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
7

Lưu ý rằng việc gọi

async function example1 () {
  const mysql = require('mysql2/promise');
  const conn = await mysql.createConnection({ database: test });
  let [rows, fields] = await conn.execute('select ?+? as sum', [2, 2]);
}
2 sẽ thực sự trả lại một lời hứa và không phải là một giá trị.
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
9

Đã trả lời ngày 16 tháng 5 năm 2017 lúc 14:49May 16, 2017 at 14:49May 16, 2017 at 14:49

Thuốc nổ PillsexplosionExplosion PillsExplosion Pills

186K50 Huy hiệu vàng320 Huy hiệu bạc396 Huy hiệu Đồng50 gold badges320 silver badges396 bronze badges50 gold badges320 silver badges396 bronze badges

2

Có vẻ như bạn sử dụng mysqljs không phải là một thư viện dựa trên lời hứa. Vì vậy, bạn không thể đạt được những gì bạn muốn sử dụng thư viện này. Vì vậy, những gì bạn có thể làm là sử dụng một thư viện dựa trên lời hứa như Sequelize hoặc nếu không như một bình luận cho thấy:

Sử dụng một công cụ như Promisifyall của Bluebird để bọc thư viện.

Tôi không biết nhiều về việc gói, vì vậy những gì tôi đã làm là chuyển sang phần tiếp theo.

Alexis Wilke

Phù hiệu vàng 18K1079 Huy hiệu bạc140 Huy hiệu đồng10 gold badges79 silver badges140 bronze badges10 gold badges79 silver badges140 bronze badges

Hoặc sử dụng mysql-async-simpleJul 18, 2018 at 9:42

Đã trả lời ngày 9 tháng 10 năm 2020 lúc 3:04Oct 9, 2020 at 3:04margherita pizza

HashhashHash23 gold badges69 silver badges128 bronze badges

8016 Huy hiệu bạc19 Huy hiệu đồng6 silver badges19 bronze badgesutil or promise/mysql we can implement promise inside mysql.connect

Bạn có thể sử dụng gói

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
8 như vậy:
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
4

Đã trả lời ngày 25 tháng 11 năm 2020 lúc 11:18Nov 25, 2020 at 11:18Jun 17, 2021 at 7:51

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from file_managed');
    console.log(rows);
  } finally {
    conn.end();
  }
})()
2

Như đã nêu bởi Leon - Han Li, tôi bao gồm các sửa đổi nhỏ, vì tôi phải làm việc với kết quả.Apr 20 at 10:43

Đã trả lời ngày 11 tháng 12 năm 2020 lúc 14:29Dec 11, 2020 at 14:29

Bất kỳ máy khách MySQL nào hỗ trợ giao thức X đều có thể cung cấp thực thi không đồng bộ, bằng cách sử dụng các cuộc gọi lại, lời hứa hoặc bằng cách chờ đợi rõ ràng về một kết quả cụ thể tại thời điểm thực sự cần thiết., either using callbacks, Promises, or by explicitly waiting on a specific result at the moment in time when it is actually needed., either using callbacks, Promises, or by explicitly waiting on a specific result at the moment in time when it is actually needed.

Async đang chờ đợi cú pháp là gì?

Tuyên bố chức năng Async tuyên bố hàm Async trong đó từ khóa đang chờ được cho phép trong thân hàm.Các từ khóa Async và Await cho phép hành vi không đồng bộ, dựa trên lời hứa được viết theo phong cách sạch hơn, tránh cần phải cấu hình rõ ràng các chuỗi hứa hẹn.. The async and await keywords enable asynchronous, promise-based behavior to be written in a cleaner style, avoiding the need to explicitly configure promise chains.. The async and await keywords enable asynchronous, promise-based behavior to be written in a cleaner style, avoiding the need to explicitly configure promise chains.

Là truy vấn cơ sở dữ liệu không đồng bộ?

Các truy vấn có thể được thực thi đối với cơ sở dữ liệu đồng bộ hoặc không đồng bộ.Mô hình thực thi chính xác để sử dụng phụ thuộc vào ứng dụng.. The correct execution paradigm to use depends on the application.. The correct execution paradigm to use depends on the application.

Bạn có thể sử dụng Async đang chờ đợi thay vì những lời hứa không?

ASYNC/AIDIT được sử dụng để làm việc với những lời hứa trong các chức năng không đồng bộ.Về cơ bản là đường cú pháp cho những lời hứa.Nó chỉ là một trình bao bọc cho mã Restyle và làm cho lời hứa dễ đọc và sử dụng hơn.Nó làm cho mã không đồng bộ trông giống như mã đồng bộ/thủ tục, dễ hiểu hơn.. It is basically syntactic sugar for promises. It is just a wrapper to restyle code and make promises easier to read and use. It makes asynchronous code look more like synchronous/procedural code, which is easier to understand.. It is basically syntactic sugar for promises. It is just a wrapper to restyle code and make promises easier to read and use. It makes asynchronous code look more like synchronous/procedural code, which is easier to understand.