如果回调存在Else返回对象,则执行回调(obj)

时间:2014-01-09 01:38:33

标签: javascript callback

我要做的是将callback参数设置为函数可选。如果传递回调,则将值发送给回调函数,否则只返回该值。如果我省略回调,则返回未定义。

getByUsername = function(user_name, cb){
    async.waterfall([
        //Acquire SQL connection from pool
        function(callback){
            sql_pool.acquire(function(err, connection){
                callback(err, connection);
            });
        },
        //Verify credentials against database
        function(connection, callback){
            var sql = 'SELECT * FROM ?? WHERE ?? = ?';
            var inserts = ['users','user_name', user_name];
            sql = mysql.format(sql,inserts);
            connection.query(sql, function(err, results) {
                sql_pool.release(connection);
                callback(err, results);   
            });
        },
        //Create user object
        function(results, callback) {
            if(results.length < 1){
                if(cb){
                    cb(null);
                } else {
                    return null;
                }
            }else {
                var thisUser = new User(results[0]);
                if(cb){
                    cb(thisUser);
                } else {
                    return thisUser;
                }
            }
        }], function (err, results) {
            throw new Error('errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrroooooorrrrrrrr');
        }
    )
}

1 个答案:

答案 0 :(得分:21)

您可以像这样检查:

if(cb && typeof cb === "function") {
    cb(num + 1);
}

注意:请确保您实际上使用cb来调用回调函数,而不是callback;)