我是个新手,用的是Java脚本. 我正在try 使用Promise和Async等待所有行及其父行

以下是我的代码

const e = require('express')
const mysql2 = require('mysql2')


const pool = mysql2.createPool({
  host: '127.0.0.1',
  user: 'root',
  password: '',
  database: 'dreamselling',
  waitForConnections: false,
  connectionLimit: 10,
  queueLimit: 0
})

let levels=[];
const getLevel = (id,levels) => {
  return new Promise((resolve, reject) => {
    let sql = `select id,memberName,parent_id from member_table where id=${id}`;
    pool.getConnection((error, connection) => {
      connection.query(sql, (err, rows) => {
        if (rows && rows[0].parent_id != null) {
          // console.log(rows[0]);
          levels.push((rows[0]))
          getLevel(rows[0].parent_id,levels)

        } else {
          pool.end()
        }
      })
    })
  })

}

async function myfunc() {
  let a = await getLevel(7)
  console.log(levels);
  // console.log('level',a);
}
myfunc()

我可以使用console.log查看行(ROWS[0]) 但无法从函数返回 关于这件事我需要帮助

推荐答案

请try 使用@robertklep建议的async await.
此外,请确保使用prepared statement:

const e = require('express');
const mysql2 = require('mysql2');

const pool = mysql2.createPool({
  host: '127.0.0.1',
  user: 'root',
  password: '',
  database: 'dreamselling',
  waitForConnections: false,
  connectionLimit: 10,
  queueLimit: 0,
});

let levels = [];

const getLevel = async (id, levels) => {
  const promisePool = pool.promise();
  const [rows, fields] = await promisePool.query(
    'select id,memberName,parent_id from member_table where id = ?',
    [id]
  );
  if (rows && rows[0].parent_id !== null) {
    levels.push(rows[0]);
    getLevel(rows[0].parent_id, levels);
  } else {
    pool.end();
  }
};

function myfunc() {
  getLevel(7);
  console.log(levels);
}

myfunc();

Javascript相关问答推荐

类型脚本中只有字符串或数字键而不是符号键的对象

在JavaScript中声明自定义内置元素不起作用

为什么我的列表直到下一次提交才更新值/onChange

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

Mongoose post hook在使用await保存时不返回Postman响应

如何让npx在windows中运行js脚本?

在Three JS中看不到补间不透明度更改效果

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

与svg相反;S getPointAtLength(D)-我想要getLengthAtPoint(x,y)

是否可以将Select()和Sample()与Mongoose结合使用?

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?

有没有一种直接的方法可以深度嵌套在一个JavaScript对象中?

是否可以将异步调用与useState(UnctionName)一起使用

如何使用Astro优化大图像?

为什么在运行于<;img>;事件处理程序中的JavaScript中x和y是不可变的?

使用Java脚本在div中创建新的span标记

单击时同时 Select 和展开可访问的行

如何从图表中映射一组图表-js使用REACT

JavaScript structuredClone在Chrome/Edge中获得了非法调用,但在NodeJS中没有

在采购unpept-visalizations.js时遇到问题