2015-09-07 47 views
1

見我的代碼NodeJS async.parallel成功被調用兩次?

router.get('/:productSlug', function(req, res, next) { 
    async.parallel({ 
     product: function(callback) { 
      products.single(callback, req,res,next) 
     } 
    }, 
    function(err, results){ 
     console.log('HERE'); 
     console.log(results.product.rows[0]); 
     res.render('product', {product : results.product.rows[0]}); 
    }); 
}); 

我的控制檯輸出如下

HERE 
{ name: 'Test Product', 
    price: '19.99' } 
GET /img/logo.png 304 9.127 ms - - 
GET /img/social/share.png 304 2.051 ms - - 
GET /img/social/tweet.png 304 2.190 ms - - 
HERE 
undefined 

所以它的工作原理,但似乎再次調用它的第二呼叫的意思不確定的部分,使整個事情打破。

任何想法 - 我完全失去了!

編輯:添加被調用的函數...

single: function (callback, req, res, next){ 
    var client = new req.app.locals.pg.Client(req.app.locals.pgCon); 
    client.connect(function(err) { 
     if(err) { 
      return callback(['could not connect to postgres', err], null); 
     } 
     client.query('SELECT * FROM products WHERE slug=$1', [req.params.productSlug], function(err, result) { 
      if(err) { 
       return callback(['error running query', err], null); 
      } 
      return callback(null, result) 
      client.end(); 
     }); 
    }); 
}, //End function : single 
+1

我只是用'async.parallel'做了一些測試,沒有遇到任何問題。 「產品單一」是什麼?你確定它只調用一次'callback'嗎? 'async'文件提到,更多地調用回調會導致不可預知的行爲。 –

+0

我已經編輯過,將它添加進來。我很確定它沒有:/ –

+0

這看起來好像多次調用'callback'。你可以在每次調用之前添加一個'console.log()'語句(或者使用斷點等進行調試)嗎? – Bergi

回答

1

當你在瀏覽器中打開網頁,它會發送額外的請求/favacon.ico - 一定要處理。

+0

奇怪的是,有一個'GET /products/favicon.ico 200 581.813 ms - 479'的請求,但它是在未定義的調用之後? –

+0

轉過來就是這樣!長時間的延遲是放棄! –