2015-11-07 57 views
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); 
    } 

眼下這將返回一個連接關閉錯誤。

回答

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); 
} 

(缺少錯誤處理)

+0

你能發佈的代碼示例? – nha