MySQL2 库 NodeJS - 更新失败且没有错误 & RowsAffected 异步调用

MySQL2 Library NodeJS - Update Fails without error & RowsAffected on async call

非异步时获取AffectedRows的方式如下:https://github.com/mysqljs/mysql/issues/363

我下面的代码 - console.logs 的 none 更新后显示在控制台中,某些列未在数据库中更新,并且没有遇到错误或 try catch。如果有错误,为什么我看不到它,否则,为什么我看不到 AffectedRows?

这是从另一个异步函数调用的。

async function UpdatePassword(connection, rowID) {
  ... some code omitted here... 
  try 
  {
    var [errQuery,results] = await 
  connection.query(sqlUpdate);
    if (errQuery) throw errQuery;
    console.log("Back from update");
    console.log("AffectedRows=" + results.affectedRows);
  } catch (err) 
  {
    console.log("*** Catch Error:") 
    console.log(err.stack);
  } 
}

我想我已经改进了代码,但还是有同样的问题。没有错误,在 connection.query 之后没有 console.log 语句出现。

console.log("SQL Update=" + sqlUpdate); 
try 
{
    var [rows, fields, errQuery] = await connection.query(sqlUpdate);
    if (errQuery) throw errQuery;
    console.log("Back from update");
    console.log("AffectedRows=" + rows.affectedRows);
} catch (err2) 
{
  console.log("*** Catch Error:") 
  console.log(err2.stack);
}   
console.log ("end function"); 

在这里得到答案:https://github.com/sidorares/node-mysql2/issues/999

从第一个异步例程到第二个异步例程的调用需要等待。

for (let r=0; r < rows.length; ++r) {
  await UpdatePassword(connection, rows[r].ID);
}

他推荐了一个 for 循环,而不是我之前得到的答案 。如果使用 .each 或 .map,您将创建另一个 "inner" 函数,该函数不是异步的,并且您不能在那种逻辑中调用使用 "await" 关键字。