一些knex错误记录了发生的文件和行,但许多knex错误却没有。这使调试不必要地乏味。.catch((err)=>{console.log(err)})
应该照顾好这个吗?代码试图重复大约4次的事实(我希望它尝试一次并停止,绝对不需要尝试更多尝试 - 只有在将进一步的条目送入数据库时,它才会弄乱事物)?
某些KNEX错误记录了发生的文件和行,但许多人不
您可以给我们一些您的查询示例,以使错误保持沉默?
我是重型knex用户,在我的开发过程中,除非有两种情况:
几乎所有错误都显示出它们发生的文件和行。- 交易中的查询可能会提早完成。
在这种情况下,我们必须自定义KNEX Inner Catter逻辑并进行一些KNEX注入,例如Runner.prototype.query
,识别TrastactionArellyCompletEdError,并记录更多信息:sql
或bindings
catch子句。
- 池连接错误
例如mysql错误: Knex:Error Pool2 - Error: Pool.release(): Resource not member of pool
这是另一个取决于您的数据库和连接软件包的问题。
代码试图重复大约4次
的事实
- 如果您用承诺链编写的重复代码,我认为它不会投4次,它应该在第一次投掷时炸开。
query1
.then(query2)
.then(query3)
.then(query4)
.catch(err => {})
- 同时执行查询
如果数组中的任何承诺被拒绝,或拒绝映射器功能返回的任何承诺,返回的承诺也将被拒绝。
Promise.map(queries, (query) => {
return query.execute()
.then()
.catch((err) => {
return err;
})
}, { concurrency: 4})
.catch((err) => {
// handle error here
})
- 如果您使用
try catch
和async 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);
}
}
}