回滚功能的MongoDB错误回调处理

回滚功能的MongoDB错误回调处理,mongodb,error-handling,rollback,Mongodb,Error Handling,Rollback,现在我正在用angularjs、expressjs和MongoDB开发全功能电子商务系统。MongoDB不提供事务查询。所以我对库存系统和支付系统使用“两阶段提交” 但是我在MongoDB错误处理中有一个问题。在“两阶段提交”中,如果在第一次查询成功后出现一些失败或错误,则回滚第一次查询。但如果回滚查询中发生其他错误,则无法确保回滚。下面是我使用expressjs的服务器端代码 首先,将商品放入用户购物车并更新产品文档(更新点菜信息)。 若在更新产品文档查询时出错,则从用户的购物车中提取项目(这

现在我正在用angularjs、expressjs和MongoDB开发全功能电子商务系统。MongoDB不提供事务查询。所以我对库存系统和支付系统使用“两阶段提交”

但是我在MongoDB错误处理中有一个问题。在“两阶段提交”中,如果在第一次查询成功后出现一些失败或错误,则回滚第一次查询。但如果回滚查询中发生其他错误,则无法确保回滚。下面是我使用expressjs的服务器端代码

首先,将商品放入用户购物车并更新产品文档(更新点菜信息)。 若在更新产品文档查询时出错,则从用户的购物车中提取项目(这是回滚过程)

但在回滚过程中(在本例中为$pull query),若调用了错误回调,则回滚过程失败

是否有任何合理的回滚方法

var userID = new ObjectID(Session.get(req, 'userId'));
var variantID = new ObjectID(body.variantID);
var quantity = Number(body.qty);
Cart.put(userID, variantID, quantity, body.detail).then(function(rs){
  if(rs.result.n == 0){
    Response.toJson(res, Code.EXIST_IN_CART, 'The product with this variant is already exist in your cart!', {});
  }else{
    Variant.carted(userID, variantID, quantity).then(function(rs){
      Response.toJson(res, Code.SUCCESS, 'Putting the product with a specific variant into your cart is success', {});
      }, function(){
        Cart.pull(userID, variantID).then(function(){
          Response.toJson(res, Code.FAILED, 'Failed to put item into your cart! Check stock or database exception!', {});
        }, function(){
          Response.toJson(res, Code.ROLLBACK_FAILED, 'Rollback process is failed!', {});
      });
    });
  }
}, Response.dbErrorCallback(res));

发布代码,而不是代码图片。@SergioTulentsev使用我的代码更新是的,更好。在这些情况下,只使用“代码示例”按钮,而不是“代码片段”。@SergioTulentsev更新为“代码示例”,我在评论之前这样做过:)发布代码,而不是代码图片。@SergioTulentsev使用我的代码更新是的,更好。在这些情况下只使用“代码示例”按钮,而不是“代码片段”。@SergioTulentsev更新为“代码示例”,我在评论之前就这么做了:)