我有这个JS代码:
Download.prototype.insert = function(stocks, exchange, cb){
var self = this
, count = stocks.length
stocks.forEach(function(stock){
save(stock, done)
})
function save(stock, cb){
self.mysql.query("my query", [exchange.id, stock.Symbol], function(err, rows){
if (rows && rows.length > 0)
self.mysql.query("my query", [rows[0].id, stock.DateTime, stock.Close], cb)
else cb()
})
}
function done(){
count--
if (count === 0) return cb()
}
}
如您所见,我将回调传递给save()
函数,我想知道我是否可以将查询分开以避免使用function(err, rows){ .... }
问题是函数等待两个参数err
和rows
,那么我怎样才能传递自定义的第三个参数(cb()
函数)?
由于
答案 0 :(得分:4)
我希望我理解你的问题^^
要包装回调参数,可以创建一个返回匿名函数(实际回调)的函数。 cb参数包含在匿名函数的上下文中:
function queryDetails(cb){
return (
function(err, rows){
if(rows && rows.length < 0){
//mysql.query ...
}else{
cb()
}
})
};
mysql.query("query", ...., queryDetails(doneCallback));
玩得开心!