0

我正在尝试对同一端点内的 2 个不同表进行 2 次查询。我可以为简单的获取查询执行此操作,但不适用于更复杂的更新/替换查询。另外我不确定在这种情况下如何正确处理错误。

以下是我尝试过的:

function upvotePost(req,res,next){
        /*query 1*/
        r.table('posts').filter(function(post){
          return post('id').eq(someId);
        }).update(
            {"upvotes": r.row("upvotes").add(1)}).run(req._rdbConn)
        /*query 2*/
        .then(function(){
            r.table('users').filter(r.row('login').eq(someUser))
            .update({upvotelist: r.row('upvotelist').changeAt(someId,1)})
            .run(req._rdbConn).then(function(result){
                res.send(JSON.stringify(result));
            })
        }).error(handleError(res))
         .finally(next);
    }

现在这会返回一个连接关闭错误。

4

1 回答 1

0

我使用 async.parallel 使它工作

function upvotePost(req,res,next){
    async.parallel([
      /*query 1*/
      function(){
        r.table('posts').filter(function(post){
          console.log(req.url);
          return post('pid').eq(parseInt(req.params.id));
        }).update({"upvotes": r.row("upvotes").add(1)}).run(req._rdbConn).then(function(result){
            res.send(JSON.stringify(result));
        })
      },
      /*query 2*/
      function(){
        r.table('users').filter(r.row('login').eq(req.decoded.login))
        .update({upvotelist: r.row('upvotelist').changeAt(parseInt(req.params.id),1)})
        .run(req._rdbConn)
      }
      ], null);
}

(缺少错误处理)

于 2015-11-07T18:14:00.690 回答