Bur*_*gin 14 javascript mysql asynchronous node.js
我需要将所有结果同步并附加到带有async/await关键字的字符串,例如c#
我是node.js的新手,我无法将这种新语法适应我的代码.
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;
});
Run Code Online (Sandbox Code Playgroud)
LeO*_* Li 22
如果您碰巧在Node 8+中,您可以利用util.promisify()
节点mysql 的本机.
不要忘记给它打电话,bind()
这样this
就不会搞砸了:
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();
}
})()
Run Code Online (Sandbox Code Playgroud)
mr_*_*all 17
使用mysql2包.它有承诺包装,所以你可以这样做:
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]);
}
Run Code Online (Sandbox Code Playgroud)
ada*_*eck 12
假设您正在使用它的ORM基于承诺,您可以执行类似的操作
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
}
}
Run Code Online (Sandbox Code Playgroud)
任何承诺都可以通过放在await
调用前与async/await一起使用.但请注意,此函数必须在async
函数"包装器"中使用.您需要处理try/catch
块中的错误.
我还想指出这4个查询不是同时运行的.你仍然需要使用Promise.all.
如果您想使用 mysql(也称为 mysqljs),并且不想使用包装器,则必须做一些工作。但这很容易。连接函数如下所示:
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()
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,等待将知道如何处理承诺。您创建此类并在回调实现中使用解析/拒绝函数。实际上,这就是它的全部内容,因此使用包装器可能会有点麻烦,除非您经常访问数据库。
归档时间: |
|
查看次数: |
35269 次 |
最近记录: |