0

同じエンドポイント内の 2 つの異なるテーブルに対して 2 つのクエリを作成しようとしています。単純な get クエリではこれを実行できますが、より複雑な更新/置換クエリでは実行できません。また、この場合、エラーを適切に処理する方法がわかりません。

以下は私が試したものです:

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 に答える