我正在尝试使用sql查询作为承诺。我似乎无法让它发挥作用:
query: (sql, args) => {
if (args) sql = mysql.format(sql, args);
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
console.log(err);
reject(Error(err.code));
}
connection.query(sql, (err, results) => {
connection.release(); // always put connection back in pool after last query
if (err) {
console.log(err);
resolve([]);
}
resolve(results);
});
});
});
},
以下是查询本身:
async function dbCall(sql, arg) {
let data = await db.query(sql, arg);
console.log(data);
data = data[0];
return data;
}
这是游泳池:
var pool = mysql.createPool({
host: 'localhost',
user: 'user',
password: 'pass',
database: 'db',
});
我正在尝试做什么: 我试图让它不会挂在异步功能上。我希望它在整个异步函数中返回一个值,而不仅仅是在其内部。
目前,它根本不起作用。但是,如果是这样的话,我希望row
在我的整个函数中定义,而不是仅在db.query
内定义。
我不确定这是否合理,但如果您需要更多澄清,只需提出任何问题。
答案 0 :(得分:1)
如果我理解你的问题,你就会误解应该如何处理承诺。 Promise使用Sub CreateButtons()
Dim i As Long
Dim shp As Object
Dim dblLeft As Double
Dim dblTop As Double
Dim dblWidth As Double
Dim dblHeight As Double
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'
'Do your stuff
'
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
函数仅在异步请求被finsihed后执行某些操作。
用简单的英语读得很好。执行我的异步请求然后对数据执行某些操作。
试试这个:
then()
此外,您可以使用异步功能。这允许使用与同步函数类似的方式处理异步函数,其中代码将按顺序执行,而不必担心在db.query(userSQL, username).then(res => console.log(res))
函数内部链接和嵌套其他代码
then()
作为旁注。当我第一次进入Promise时,这对我非常有帮助。