【问题标题】:Rerun function from callback从回调中重新运行函数
【发布时间】:2018-11-20 13:26:38
【问题描述】:

这是我的伪代码:

Model.observe('after save', function (ctx, next) {
  const sql = `
    BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    -- ...
    COMMIT;
  `
  ds.connector.query(sql, function (err, res) {
    if (err) {console.log(err); return next(err)}
    next()
  })
}

我尝试运行原始 sql 语句,但 db (postgres) 返回 s 错误:

代码:'40001',

detail: '原因代码:在写入过程中,在识别为枢轴时被取消。',

hint: '如果重试,交易可能会成功。',

所以如果errds.connector.query 中引发,我想重新运行ds.connector.query 而不是在Model.observe 函数的回调(next)中发回错误

【问题讨论】:

    标签: node.js postgresql loopbackjs


    【解决方案1】:

    不推荐,因为它可以保持无限循环,但它应该使用递归:

    let failCount = 0, maxTry = 3;
    
    Model.observe('after save', function (ctx, next) {
      const sql = `
        BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
        -- ...
        COMMIT;
      `
      query(sql, next);
    }
    
    function query(sql, next) {
        ds.connector.query(sql, function (err, res) {
            if (err) {
                console.log(err);
                if (failCount < maxTry) {
                    query(sql, next); //querying again
                    failCount++;
                } else {
                    next(err);
                }
            }
            next()
        });
    }
    

    【讨论】:

    • 但是我可以给你一些变量,以跟踪它已经重新运行了多少次,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多