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);
		});
	});
    程序可以按照原次序执行了。
   



发布了32 篇原创文章 · 获赞 1 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lhf2112/article/details/52848058