【问题标题】:Node js - Promise Rejection Warning when process a lot of dataNode js - 处理大量数据时的承诺拒绝警告
【发布时间】:2017-06-28 13:05:42
【问题描述】:

我正在创建一个功能,当您传递条形码时,会将条形码的乘积添加到表格中。

之后,我们有一个按钮可以将数据保存在表格中。对于每一行都需要生成一个标记并插入到名为 bo、bo2 和 bo3 的表中。

使用 bo 的标记,我们将插入一个名为 bi、bi2 和 sl 的表中。

所以,我创建了一个结构来使用 Promise 执行此操作,但我遇到了错误,但它只会在我有 20 行时发生:

<node:6796> UnhandledPromiseRejectionWarning: Unhandled promise rejection <rejection id: 13>: RequestError: Transaction <Process ID 61> was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

与数据库的连接是通过 mssql 库完成的。

就像我的函数更大,有必要向您展示所有代码以更好地理解问题,我将链接放在我的函数下方。 http://pastebin.com/MnM6AE6a

我已经更改了函数的结构,但问题仍然存在。

【问题讨论】:

  • 与您遇到的问题无关,但您需要考虑使用参数化查询。这段代码只是在乞求 SQL 注入攻击。

标签: javascript sql-server node.js express promise


【解决方案1】:

您的代码示例有 150 行代码,因此我不会全部调试(您应该始终提供重现问题所需的最小代码示例,如果您希望人们帮助您发现并修复实际错误),但 UnhandledPromiseRejectionWarning 意味着您在某处没有为承诺包含 catch 处理程序。

例如,如果你有任何地方:

promise.then(func);

代替:

promise.then(func1, func2);

或:

promise.then(func1).catch(func2);

那么您的代码没有正确处理承诺拒绝,因此被破坏了。将来这个程序甚至可能不会在 Node 的下一个版本中启动 - 我在这个答案中更详细地解释了它:

另外,在查看了您的代码后,我强烈建议阅读有关 SQL 注入攻击的信息。我是认真的。甚至在您解决未处理的承诺拒绝问题之前,谷歌主题并修复您的代码。严重地。这些年来我不再指的是这个连环画,但每个开发者都应该知道并理解它:

请阅读:

【讨论】:

  • 感谢您的帮助!我真的很感激。我是 node 新手,我很难使用 promise,但对于每个 promise,我通常都会这样做 Promise.all([items]).then(function(listOfResults) {//content}).catch(function(err){console.log('err');}); @rsp
猜你喜欢
  • 2020-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 2023-01-16
相关资源
最近更新 更多