js匿名函数作为函数参数 (返回值作为另一个函数的参数)

NodeJS 以事件响应的形式返回结果大家都知道的,所以有时候不能直接返回值给函数调用,那就需要在事件响应后把结果返回,于是就用到了匿名函数作为函数参数 (也可以理解为返回值作为另一个函数的参数)。

代码,以前一般做法:

function a()
	{
		var result = b();
		document.write(result);
	}
	function b()
	{
		var a=123; return a;
	}

但是如果本身 function b() 里面就嵌套一个事件响应,想把响应的结果返回就不行了。如代码:

connection.query("select * from table1",function selectCb(err, results, fields) 
	{
		if (err) 
		{
			console.log("=== query err: sql=["+sql+"], "+err+"===");
			fun(-1);
		}
		return results;//这样在调用函数里面是不会收到返回值的
	});

原因:因为Nodejs 非阻塞的问题,以上函数调用后就已经马上返回了,根本等不到数据查询出来。

相当于调用以下函数aa(),你是不会等得到返回result的,因为调用aa(),执行query()后,接着执行下面的代码,也就是函数已经返回,但其他数据库可能还没有查询出来结果。

function aa()
{
connection.query()
{ 
    var result;
    ....;//数据库查询
    return result;
}
return null;
}


于是就有了这篇文章说的内容,直接上代码原型:

    <!DOCTYPE html>  
    <html lang="en">  
      <head>  
      </head>  
      
      <body>  
        <script>  
        function test( a, b ){  
            a+=1;  
            b(a);  
        }  
      
      test(3, function(result){  
            console.log(result);  
        });  
      
        </script>  
      </body>  
    </html>  

一个使用例子:Node JS查询数据线信息

//Nodejs mysql交互的类定义
function dbHelper(username,password,database,hostname)
{
    this.username = username;
	this.password = password;
	this.database = database;
	this.hostname = hostname;
	this.connection = require('mysql').createConnection({
        host:this.hostname,
        user:this.username,
        password:this.password,
        database: this.database
		});
	this.query = function(sql,fun)
	{
		this.connection.query(sql,function selectCb(err, results, fields) 
		{
			if (err) 
			{
				console.log("=== query err: sql=["+sql+"], "+err+"===");
				fun(-1);
			}
			fun(results);
		});
	}
}

	var db = new dbHelper('root','123456','nodejs_mysql_test',"localhost");
	db.query('SELECT * FROM test',function(result){
        console.log("out putting result...");
        //console.log(result);
        for(var i=0;i<result.length;i++)
        {
            console.log(result[i].id);
            console.log(result[i].title);
            console.log(result[i].text);
        }
    });
 

PS,以上dbHelper 的写法,一般在Node js要用module.exports = dbHelper;


匿名函数参考内容:http://blog.csdn.net/pingfengafei/article/details/44096155

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值