首页 > 解决方案 > 在数组中获取异步等待错误和空白值

问题描述

我收到以下错误:

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 })
        }   
}

标签: mysqlnode.jsasync-awaitarray.prototype.map

解决方案


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 })
  }
}

推荐阅读