Node.js 使KnexJS事务与async/await一起工作

Node.js 使KnexJS事务与async/await一起工作,node.js,postgresql,express,knex.js,Node.js,Postgresql,Express,Knex.js,我试图让事务与async/await和knexjs一起工作,但没有用 代码(代码片段是为了缩短文章): const updateOrder=(请求、恢复、数据库、记录器)=>{ 让{ 地位 trx_id, 奥努姆, 返回原因 }=请求主体; 常量updateStatus=()=>{ 返回数据库('购物车') 。正在返回(“*”) .where('trx_id','=',trx_id) .更新({ 状态:状态, 或_num:orNumber, 返回原因:返回原因 }); } 常数更新日期=()=

我试图让事务与async/await和knexjs一起工作,但没有用

代码(代码片段是为了缩短文章):

const updateOrder=(请求、恢复、数据库、记录器)=>{
让{
地位
trx_id,
奥努姆,
返回原因
}=请求主体;
常量updateStatus=()=>{
返回数据库('购物车')
。正在返回(“*”)
.where('trx_id','=',trx_id)
.更新({
状态:状态,
或_num:orNumber,
返回原因:返回原因
});
}
常数更新日期=()=>{
返回数据库('购物车')
。正在返回(“*”)
.where('trx_id','=',trx_id)
.更新({
购买日期:新日期()
});
}
const selectItems=(顺序)=>{
返回数据库
。选择(“*”)
.from('cart_items')
.在哪里({
购物车id:order.id,
trx\u id:order.trx\u id
});
}
const selectProduct=(项目)=>{
常量查询=[];
item.forEach(item=>{
const query=db.select(“*”)
.from(‘产品’)
.where('item_code','=',item.item_code);
查询。推送(查询);
})
返回承诺。全部(查询);
}
const updateQuantity=(产品、购物车)=>{
const prodQuantity=product.map(product=>parseInt(product.stock));
const cartQuantity=cart.map(cart=>parseInt(cart.quantity));
常量newQuantity=[];
常量查询=[];
for(设i=0;i{
const query=db(‘产品’)
。正在返回(“*”)
.where('item_code','=',cart.item_code)
.更新({
股票:新数量[指数]
})
查询。推送(查询);
})
返回查询;
}
常量更新日志=()=>{
返回数据库('活动\订单\日志')
。正在返回(“*”)
.插入({
日期:新日期(),
员工id:req.session.emp\u id,
单元:“监测”,
trx_id:trx_id,
活动:地位,
或数量:或数量
})
}
const sendResponse=(结果)=>{
如果(结果){
res.json({
isSuccess:正确
});
返回;
}否则{
res.json({
isSuccess:错误
});
返回;
}
}
(异步()=>{
const first=等待更新状态();
如果(第一个[0]。状态==“成功”){
const second=await updateDate().catch(err=>{
失误
});
const third=wait selectItems(第二个[0])。catch(错误=>{
失误
});
const fourth=等待selectProduct(第三个)。catch(错误=>{
失误
});
常数fourth2=[].concat(…第四);
const fifth=await updateQuantity(第四,第三)
const decreaseStock=async()=>{
常量finalResult=[];
for(设i=0;i{
失误
});
常量result2=[].concat(…结果);
常量日志=等待更新日志().catch(错误=>{
失误
});
const sendRes=等待发送响应(日志);
}else if(第一个[0]。状态=='Returned'){
常量日志=等待更新日志().catch(错误=>{
失误
});
const sendRes=等待发送响应(日志);
}否则{
常量日志=等待更新日志().catch(错误=>{
失误
});
const sendRes=等待发送响应(日志);
}
})()捕获(错误=>{
控制台日志(err);
res.json({
isSuccess:错误
})
});
}
module.exports={
更新顺序

}
看起来您正在创建事务,但是您没有向它发送任何查询,而是向knex连接池中的其他数据库连接发送查询

以下是您应如何使用knex的交易:

async () {
  try {
    const trxResult = await db.transaction(async (trx) => {
      const queryResult = await trx('table').where(... etc. ...);
      // do some more queries to trx
    });
    console.log("transaction was committed");
  } catch (e) {
    console.log("transaction was rolled back");
  }
}

此外,在将问题发布到stackoverflow之前,您应该尝试将代码量降至最低。将太多的代码隐藏到代码片段中根本没有帮助。

当其他所有操作都失败时,这项工作将无法完成。除了向trx发送查询,我什么都做了。我一直在发db。非常感谢。