Javascript 节点Js等待在异步函数内不工作

Javascript 节点Js等待在异步函数内不工作,javascript,node.js,sql-server,async-await,Javascript,Node.js,Sql Server,Async Await,我试图用async/await从数据库中获取一些数据,然后用一些数据创建一个对象并插入到数据库中。我需要为此同步调用,以便发送完整的插入数据。 我有一个异步函数,但等待不起作用 代码如下: async function queryDb(roleName) { let pool = await sql.connect(dbConfig); let data = await pool.request() .query(`select id from table whe

我试图用async/await从数据库中获取一些数据,然后用一些数据创建一个对象并插入到数据库中。我需要为此同步调用,以便发送完整的插入数据。
我有一个异步函数,但等待不起作用

代码如下:

async function queryDb(roleName) {
    let pool = await sql.connect(dbConfig);
    let data = await pool.request()
        .query(`select id from table where name='${roleName}'`);
    roleId = data.recordset[0].id;
    pool.close;
    sql.close;
    return roleId;
}

queryDb(roleId)
    .then(result => {
        console.log(result);
    })
    .catch(err => {
        pool.close;
        sql.close;
        console.log(err)
    })

async function program() {
    const xlsxFile = require('read-excel-file/node');
    xlsxFile('./file.xlsx').then((rows) => {
        let roleid = await queryDb(rows[0][1]); // here is not working
        let insretObj = {
            field1: rows[0][0],
            field2: rows[1][1],
            field3: rows[2][2],
            field4: rows[3][3],
            field5: rows[4][4],
            field6: rows[5][5],
            role_id: roleid,
        };
        assignRoles(insretObj);
    });

};

program().then(console.log('hereeeeeee'));
我真的很感激你的回答

它显示此错误“等待仅在异步函数中有效”。我只想在这里获得roleId,并使用该角色id创建下面的对象

您对
wait
的使用在嵌套的
.then()
处理程序回调中,该回调本身不是
async

通常,您不希望在同一控制流中混合使用
.then()
wait
。我建议您将其更改为:

const xlsxFile = require('read-excel-file/node');

async function program() {
    let rows = await xlsxFile('./file.xlsx');
    let roleid = await queryDb(rows[0][1]);
    let insretObj = {
        field1: rows[0][0],
        field2: rows[1][1],
        field3: rows[2][2],
        field4: rows[3][3],
        field5: rows[4][4],
        field6: rows[5][5],
        role_id: roleid,
    };

    assignRoles(insretObj);
}

您使用什么库进行sql访问?它支持承诺吗?还有,
pool.close
sql.close
的意义是什么?这些应该是函数调用,您实际上是在
pool.close()
sql.close()
中调用的吗?@jfriend00我正在使用mssql。关于另一个,是的,我想它们是一样的,它们不一样。像
pool.close
这样的语句不起任何作用。@jfriend00这与我的问题有关吗?等待在程序功能内部不起作用