Node.js 回调函数来解决SQL语句与返回值的异步问题

    作为一个刚刚接触Node的菜鸟,面对Node的异步问题着实是头大。最近做一个前端的分页问题,原代码是顺序执行两条sql语句然后返回:

       client.query(  //第一个sql
	
	  'SELECT * FROM products' ,
	  function selectCb(err, results, fields) { 
		if (err) {  
		  throw err;  
		}  
		  
		  if(results)
		  {
			  len=0;
			  for(var i = 0; i < results.length; i++)
			  {
				   len = len+1;
			  }
		  }    
	  }  
	);
       client.query(  //第二个sql
	  'SELECT * FROM products where id>'+(page-1)*size+' and id<='+page*size,  
	  function selectCb(err, results, fields) {  
		if (err) {  
		  throw err;  
		}  
		  
		  if(results)
		  {
			  data = [];
			  for(var i = 0; i < results.length; i++)
			  {
				  data[i] = {id:results[i].id, image:results[i].image};
				  console.log("%d\t%s", results[i].id, results[i].image);
				  
			  }
		  }
	  }  
	);
        response.writeHead(200, {'Content-Type': 'text/plain','Access-Control-Allow-Origin':'*'});
	str = " {\"records\": ";
	str += JSON.stringify(data);  //此处为一个[]数组

	str += ",\"len\": ";
	str += len;
	str += ",\"status\": ";
	str += 1;
	str += "}";
	response.end(str);

    但实际上,结果是Node先返回了response,然后执行的sql语句。

    后来通过查阅,初步了解了通过回调函数来实现同步,修改程序如下:

client.query(  //第一个sql
	  'SELECT * FROM products' ,
	  function selectCb(err, results, fields) { 
		if (err) {  
		  throw err;  
		}  
		  
		if(results)
		{
			  len=0;
			  console.log("client.query1");
			  for(var i = 0; i < results.length; i++)
			  {
				   len = len+1;
			  }
		}
		client.query(  //第二个sql
			'SELECT * FROM products where id>'+(page-1)*size+' and id<='+page*size,  
			  function selectCb(err, results, fields) {  
				if (err) {  
				  throw err;  
				}  
				  
				if(results)
				{
					  data = [];
					  for(var i = 0; i < results.length; i++)
					  {
						  data[i] = {id:results[i].id, image:results[i].image};
						  console.log("%d\t%s", results[i].id, results[i].image);
						  
					  }
				}    

				response.writeHead(200, {'Content-Type': 'text/plain','Access-Control-Allow-Origin':'*'});
				str = " {\"records\": ";
				str += JSON.stringify(data);  //此处为一个[]数组

				str += ",\"len\": ";
				str += len;
				str += ",\"status\": ";
				str += 1;
				str += "}";
				response.end(str);
		});
	});
    程序可以按照原次序执行了。
   



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值