mysql - 在数组中获取异步等待错误和空白值
问题描述
我收到以下错误:
SyntaxError: await 仅在异步函数中有效
我也得到了空白数组“console.log(userTasklist)”。
const mysql = require('mysql2/promise');
// create the connection to database
const connection = async ()=> {
return await mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'whosin'
})
}
exports.allUserList = async (req, res) => {
const db = await connection()
let userID = req.params.userid;
const userdata = await db.query('SELECT name, user_id, employee_code FROM users WHERE under_gh = ?', [userID]);
//console.log(userdata[0])
if (userdata[0] && userdata[0].length > 0) {
let userTasklist = [];
userdata[0].map((datauser) => {
var objtask = {};
const taskdata = await db.query("SELECT DATE_FORMAT(created_date, '%Y-%m-%d') as created_date, created_time, tasklist, user_id, DATE_FORMAT(created_by, '%Y-%m-%d') as date, DATE_FORMAT(created_by, '%H:%i:%s') as time FROM tasklist where user_id = ?", [datauser.user_id]);
if (taskdata[0] && taskdata[0].length > 0) {
objtask = {
userid: datauser.user_id,
tasklist: taskdata[0]
}
console.log(objtask);
userTasklist.push(objtask);
}
})
console.log(userTasklist)
//res.send({ message: "user list fetched", userdata: userdata[0], tasklistdata: userTasklist })
}
}
解决方案
db.query 的等待范围在 map 函数内。map 函数需要有 async 关键字。但是,除非您将其包装在 Promise.all 中,否则它仍然无法工作。这将确保在您的代码继续前进之前解决所有地图迭代。
exports.allUserList = async (req, res) => {
const db = await connection()
let userID = req.params.userid
const userdata = await db.query('SELECT name, user_id, employee_code FROM users WHERE under_gh = ?', [userID])
// console.log(userdata[0])
if (userdata[0] && userdata[0].length > 0) {
let userTasklist = []
await Promise.all(
userdata[0].map(async (datauser) => {
var objtask = {}
const taskdata = await db.query("SELECT DATE_FORMAT(created_date, '%Y-%m-%d') as created_date, created_time, tasklist, user_id, DATE_FORMAT(created_by, '%Y-%m-%d') as date, DATE_FORMAT(created_by, '%H:%i:%s') as time FROM tasklist where user_id = ?", [datauser.user_id])
if (taskdata[0] && taskdata[0].length > 0) {
objtask = {
userid: datauser.user_id,
tasklist: taskdata[0]
}
console.log(objtask)
userTasklist.push(objtask)
}
})
)
console.log(userTasklist)
// res.send({ message: "user list fetched", userdata: userdata[0], tasklistdata: userTasklist })
}
}
推荐阅读
- c++ - 使用 %s 的 C++ 嵌套循环
- azure - 关闭 Log Analytics 表架构的 Azure 警报
- python - 无法安装 NDK
- git - 我们可以复制 windows 文件系统来迁移 Git 服务器吗
- python - 如何让游戏重新开始?
- javascript - Axios (React Native) POST 请求适用于 iOS(模拟器)但不适用于 Android(模拟器)
- protractor - 量角器 - 是否可以使用单个“预期”语句对元素进行多次检查?
- spring-webflux - 是否可以将 spirng security acl 与 spring webflux 一起使用?
- pwm - ATSAMC21 PWM 占空比停留在 99%
- substrate - 我的配置存储的 GenesisConfig 条目在哪里?