如何将函数作为回调传递?

时间:2012-01-21 18:46:28

标签: javascript node.js

我有这个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){ .... }

问题是函数等待两个参数errrows,那么我怎样才能传递自定义的第三个参数(cb()函数)?

由于

1 个答案:

答案 0 :(得分:4)

我希望我理解你的问题^^

要包装回调参数,可以创建一个返回匿名函数(实际回调)的函数。 cb参数包含在匿名函数的上下文中:

function queryDetails(cb){
  return (
    function(err, rows){
      if(rows && rows.length < 0){
        //mysql.query ...
      }else{
        cb()
      }
    })
 };
 mysql.query("query", ...., queryDetails(doneCallback));

玩得开心!