見我的代碼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
我只是用'async.parallel'做了一些測試,沒有遇到任何問題。 「產品單一」是什麼?你確定它只調用一次'callback'嗎? 'async'文件提到,更多地調用回調會導致不可預知的行爲。 –
我已經編輯過,將它添加進來。我很確定它沒有:/ –
這看起來好像多次調用'callback'。你可以在每次調用之前添加一個'console.log()'語句(或者使用斷點等進行調試)嗎? – Bergi