0

非 Async 时获取 AffectedRows 的方法如下所示:https://github.com/mysqljs/mysql/issues/363

下面是我的代码-更新后控制台中没有任何console.logs显示在控制台中,某些列没有在数据库中更新,也没有遇到错误或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"); 
4

1 回答 1

0

在这里得到了答案: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,您将创建另一个非异步的“内部”函数,并且您不能在这种逻辑中调用使用“await”关键字。

于 2019-08-16T00:09:49.280 回答