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ỏi ngày 16 tháng 5 năm 2017 lúc 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.Đừ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:22
Leon - 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 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:43
mr_squallmr_squallmr_squall
2.09720 Huy hiệu bạc19 Huy hiệu đồng20 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.
Đã trả lời ngày 16 tháng 5 năm 2017 lúc 14:47May 16, 2017 at 14:47
adam-beckadam-beckadam-beck
5.4014 Huy hiệu vàng18 Huy hiệu bạc34 Huy hiệu đồng4 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']
var my_connection = mysql.createConnection[{ ... }]
async function connect[]
{
try
{
await new Promise[[resolve, reject] => {
my_connection.connect[err => {
return err ? reject[err] : resolve[]
}]
}]
}
catch[err]
{
...handle errors...
}
}
connect[]
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:56
Alexis WilkeAlexis WilkeAlexis Wilke
Phù hiệu vàng 18K1079 Huy hiệu bạc140 Huy hiệu đồng10 gold badges79 silver badges140 bronze badges
Hoặc sử dụng mysql-async-simple
//www.npmjs.com/package/mysql-async-simple
const { makeDb } = require['mysql-async-simple'];
const mysql = require["mysql"];
const connection = mysql.createConnection[{
host: process.env.HOST,
user: process.env.USER,
password: process.env.PASSWORD,
database: process.env.DB
}];
const db = makeDb[];
await db.connect[connection];
try {
const users = await db.query[connection, 'SELECT * FROM users'];
} catch [e] {
// handle exception
} finally {
await db.close[connection];
}
Đã trả lời ngày 9 tháng 10 năm 2020 lúc 3:04Oct 9, 2020 at 3:04
HashhashHash
8016 Huy hiệu bạc19 Huy hiệu đồng6 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['promise-mysql']
const getDbConnection = async [] => {
return await mysql.createConnection[{
host: process.env.HOST,
user: process.env.USER,
password: process.env.PASSWORD,
database: process.env.DB
}]
}
const getUsers = async [] => {
const db = await getDbConnection[]
const users = await db.query["SELECT * FROM users"]
await db.end[]
return users
}
Đã trả lời ngày 25 tháng 11 năm 2020 lúc 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ả.
var mysql = require['mysql'];
const util = require['util'];
const conn = mysql.createConnection[{
host : '127.0.0.1',
user : 'user',
password : 'password',
database : 'database'
}];
const query = util.promisify[conn.query].bind[conn];
let result = async function[] {
var userCourse = [];
try {
const rows = await query['select * as count from file_managed'];
} finally {
conn.end[];
return userCourse;
}
};
result[]
.then[value => {
console.log[value]
}];
Đã trả lời ngày 11 tháng 12 năm 2020 lúc 14:29Dec 11, 2020 at 14:29
Dixoendixoendixoen
3354 Huy hiệu bạc12 Huy hiệu Đồng4 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.async function appendedText[] {
const connection = await DatabasePool.getConnectionAsync[];
const [string1, string2, string3, string4] = await [
connection.query[query1],
connection.query[query2],
connection.query[query3],
connection.query[query4],
];
return string1 + string2 + string3 + string4;
}
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ị.appendedText[].then[appended_text => {}];
Đã trả lời ngày 16 tháng 5 năm 2017 lúc 14:49May 16, 2017 at 14:49
Thuốc nổ PillsexplosionExplosion Pills
186K50 Huy hiệu vàng320 Huy hiệu bạc396 Huy hiệu Đồng50 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 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:04margherita pizza
Hashhash23 gold badges69 silver badges128 bronze badges
8016 Huy hiệu bạc19 Huy hiệu đồngutil 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[];
}
}][]
0Đã trả lời ngày 25 tháng 11 năm 2020 lúc 11:18Jun 17, 2021 at 7:51
const { makeDb } = require['mysql-async-simple'];
const mysql = require["mysql"];
const connection = mysql.createConnection[{
host: process.env.HOST,
user: process.env.USER,
password: process.env.PASSWORD,
database: process.env.DB
}];
const db = makeDb[];
await db.connect[connection];
try {
const users = await db.query[connection, 'SELECT * FROM users'];
} catch [e] {
// handle exception
} finally {
await db.close[connection];
}
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