mysql - 异步功能等待不等待
问题描述
我有一个异步函数,用于在 Node.js 中查询 mysql 数据库。我正在等待查询执行的结果并将结果插入到数组中。
async function getOpenOrders() {
try {
const arrayLoads = [],
last4Orders = await pool.query( `${query1} ` )
// console.log(last4Orders)
for ( let i = 0; i < last4Orders.length; i++ ) {
// console.log(last4Orders[i].orderID)
console.log( arrayLoads )
console.log( `===================` )
const rows = await pool.query( `${query2}` )
console.log( rows )
arrayLoads.push( rows )
// console.log(arrayLoads)
}
// console.log(rows[0])
// console.log(arrayLoads)
res.send( arrayLoads )
} catch ( err ) {
console.log( err )
}
}
getOpenOrders()
但是,for 循环中的 await 查询并没有停止同步代码,因为我的console.log()
显示如下:
[]
===================
[]
[ [] ]
===================
[]
[ [], [] ]
===================
[RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 },
RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 }]
[ [],
[],
[RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 },
RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 }]
===================
[RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 },
RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 }]
解决方案
mysqlpool.query
方法返回一个回调,如果要使用async await
,请尝试promisify该方法然后使用async await
const {promisify} = require('util');
async function getOpenOrders() {
try {
const arrayLoads = [],
query = promisify(pool.query).bind(pool);
last4Orders = await query( `${query1} ` )
// console.log(last4Orders)
for ( let i = 0; i < last4Orders.length; i++ ) {
// console.log(last4Orders[i].orderID)
console.log( arrayLoads )
console.log( `===================` )
const rows = await query( `${query2}` )
console.log( rows )
arrayLoads.push( rows )
// console.log(arrayLoads)
}
// console.log(rows[0])
// console.log(arrayLoads)
res.send( arrayLoads )
} catch ( err ) {
console.log( err )
}
}
getOpenOrders()
推荐阅读
- python - 向量化结果/迭代模拟(在 python 中)
- javascript - Highcharts sunburst - 覆盖全局颜色
- sql - T-SQL - 将具有当前页面和以前页面的表转换为每个会话的顺序
- flutter - 我不能在堆栈中居中多个小部件
- gradle - 如何在 Gradle 中使用 pom 类型依赖
- amazon-web-services - Python 模块不在 AWS-EMR 的工作节点上
- octobercms - 当 OctoberCMS AJAX 调用 onSend 函数时,它不会执行它的代码
- qlikview - Qlik Sense:如何在 Google Drive 中指定路径?
- c# - MQTTnet 客户端无法连接服务器证书
- r - 在标题中插入图像并将其大小调整为字体大小