KNEX错误是否可以登录其发生的代码中的位置



一些knex错误记录了发生的文件和行,但许多knex错误却没有。这使调试不必要地乏味。.catch((err)=>{console.log(err)})应该照顾好这个吗?代码试图重复大约4次的事实(我希望它尝试一次并停止,绝对不需要尝试更多尝试 - 只有在将进一步的条目送入数据库时,它才会弄乱事物)?

某些KNEX错误记录了发生的文件和行,但许多人不

您可以给我们一些您的查询示例,以使错误保持沉默?

我是重型knex用户,在我的开发过程中,除非有两种情况:

几乎所有错误都显示出它们发生的文件和行。
  1. 交易中的查询可能会提早完成。

在这种情况下,我们必须自定义KNEX Inner Catter逻辑并进行一些KNEX注入,例如Runner.prototype.query,识别TrastactionArellyCompletEdError,并记录更多信息:sqlbindings catch子句。

  1. 池连接错误

例如mysql错误: Knex:Error Pool2 - Error: Pool.release(): Resource not member of pool

这是另一个取决于您的数据库和连接软件包的问题。

代码试图重复大约4次

的事实
  1. 如果您用承诺链编写的重复代码,我认为它不会投4次,它应该在第一次投掷时炸开。
query1
.then(query2)
.then(query3)
.then(query4)
.catch(err => {})
  1. 同时执行查询

如果数组中的任何承诺被拒绝,或拒绝映射器功能返回的任何承诺,返回的承诺也将被拒绝。

Promise.map(queries, (query) => {
  return query.execute()
  .then()
  .catch((err) => {
    return err;
  })
}, { concurrency: 4})
.catch((err) => {
  // handle error here
})
  1. 如果您使用try catchasync await

仍然不会重复4次,如果您已经知道错误类型,与此同时,如果您不知道会丢什么错误,为什么不执行一次错误以找出错误?

async function repeatInsert(retryTimes = 0) {  
  try {
    await knex.insert().into();
  } catch(err) {
    // handle known error
    if (err.isKnown) {
      throw err;
    }
    // and retry
    if (retryTimes < 4) {
      return await repeatInsert(retryTimes + 1);
    }
  }
}

相关内容

  • 没有找到相关文章

最新更新