functional javascript
2015-09-06 22:07
585 查看
(转载请注明出处!)
今早带我的master跟我分享了他最近看《functional javascript》一书的感悟,瞬间觉得写1w行代码都不如看本好书来的好啊!
于是在下午的写的项目中就运用了《functional javascript 》一书所介绍的编程思想。具体场景是这样的:在我开发项目的时候会遇到这样一种情况,多个函数在结构上具有较大的相似性,只有部分地方不一致,如果一个一个具体的写的话则显得愚蠢并且低效。如果采用函数式编程的思想代码将会变得非常简洁。
下面给出代码:
很容易想到的方式:
上面的代码明显有很多重复的地方,换种方式就是说操作三个数据库的代码的模式是一样的。下面给出改进后的代码:
与第一种相比,代码量明显少了很多,而且这种方式还有利于后期动态添加。另一种实现方式是:
---记录,分享。转载请注明出处!
今早带我的master跟我分享了他最近看《functional javascript》一书的感悟,瞬间觉得写1w行代码都不如看本好书来的好啊!
于是在下午的写的项目中就运用了《functional javascript 》一书所介绍的编程思想。具体场景是这样的:在我开发项目的时候会遇到这样一种情况,多个函数在结构上具有较大的相似性,只有部分地方不一致,如果一个一个具体的写的话则显得愚蠢并且低效。如果采用函数式编程的思想代码将会变得非常简洁。
下面给出代码:
很容易想到的方式:
/* Created By yyrdl on 2015/9/6 */ var mysql_config=require("./final_config.js").mysql; var mysql=require("mysql"); var database1 = mysql.createPool(mysql_config.database1); var database2 = mysql.createPool(mysql_config.database2); var database3 = mysql.createPool(mysql_config.database3); var database1_query=function(sql,parameters,timeout){ return new Promise(function(resolve,reject){ database1.query(sql,parameters,function(err,datas){ if(err){ reject(err); }else{ resolve(datas); } }); if(timeout&&timeout>0) { setTimeout(function(){ reject("timeout"); },timeout); } }); }; var database2_query=function(sql,parameters,timeout){ return new Promise(function(resolve,reject){ database2.query(sql,parameters,function(err,datas){ if(err){ reject(err); }else{ resolve(datas); } }); if(timeout&&timeout>0) { setTimeout(function(){ reject("timeout"); },timeout); } }); }; var database3_query=function(sql,parameters,timeout){ return new Promise(function(resolve,reject){ database3.query(sql,parameters,function(err,datas){ if(err){ reject(err); }else{ resolve(datas); } }); if(timeout&&timeout>0) { setTimeout(function(){ reject("timeout"); },timeout); } }); }; exports.database1_query=database1_query; exports.database2_query=database2_query; exports.database3_query=database3_query;
上面的代码明显有很多重复的地方,换种方式就是说操作三个数据库的代码的模式是一样的。下面给出改进后的代码:
/* Created By yyrdl on 2015/9/6 */ var mysql_config=require("./final_config.js").mysql; var mysql=require("mysql"); var database1 = mysql.createPool(mysql_config.database1); var database2 = mysql.createPool(mysql_config.database2); var database3 = mysql.createPool(mysql_config.database3); var get_query_func=function (pool){ return function(){ var args=arguments; return new Promise(function(resolve,reject){ function cb(err,data){ if(err) { reject(err); }else{ resolve(data); } } var arg=[args[0],args[1],cb]; pool.query.apply(this,arg); if(args[2]&&args[2]>0) { setTimeout(function(){ reject("timeout"); },args[2]); } }); } } exports.database1_query=get_query_func(database1); exports.database2_query=get_query_func(database2); exports.database3_query=get_query_func(database3);
与第一种相比,代码量明显少了很多,而且这种方式还有利于后期动态添加。另一种实现方式是:
/* Created By yyrdl on 2015/9/6 */ var mysql_config=require("./final_config.js").mysql; var mysql=require("mysql"); var database1 = mysql.createPool(mysql_config.database1); var database2 = mysql.createPool(mysql_config.database2); var database3 = mysql.createPool(mysql_config.database3); var pools={ "database1":database1, "database2":database2, "database3":database3 }; var get_query_func=function (pool_name){ return function(){ var args=arguments; return new Promise(function(resolve,reject){ pools[pool_name].query(args[0],args[1],function(err,datas) { if(err) { reject(err); }else{ resolve(datas); } }); if(args[2]&&args[2]>0) { setTimeout(function(){ reject("timeout"); },args[2]); } }); } } exports.database1_query=get_query_func("database1"); exports.database2_query=get_query_func("database2"); exports.database3_query=get_query_func("database3");
---记录,分享。转载请注明出处!
相关文章推荐