古人云:代码有问题,怎么办??找我啊,。。嘿嘿嘿
最近写代码遇到了这么一个问题在用nodejs连接数据库时出现了一个特别蛋疼的问题,我们先来看事例代码,我简化了
1 app.get(‘/select_kyjj‘,function(req,res){ 2 3 4 client.query(str,function(err,data){ 5 console.log(“这是查询里面“) 6 }); 7 console.log (”这是查询外面”) 8 9 });
我们这个是nodejs 后台的代码,每次的打印出来的当然是
------这是查询外面
------这是查询里面
那为什么不是先查询查询里面再查询里面的嘛?当时我也入坑了,原因就是query在查询的时候他是异步的
1 client.query(str,function(err,data){ 2 length = data.length; 3 for(var i in data){ 4 num = i; 5 var flag = isGroup(data[i].name,ls_arr);//true 6 if(!flag){//没有分组 7 ls_arr.push(data[i].name); 8 client.query(‘select * from groud_qd where name ="‘+data[i].name+‘"‘,function(err,data1){ 9 datajson.push(data1); 10 }) 11 } 12 } 13 }); 14 15 var timer = setInterval(function(){ 16 if(num == length - 1){ 17 res.jsonp(datajson); 18 clearInterval(timer); 19 } 20 },500);
这里我就直接的插入代码,上面的我们需要遍历这个整个的数组,并且我们需要提取数据进行整合,最后将数据传出去;
这里我用的是事件监听,用setInterval监听我们的数据是否的整合完整,完整之后就将数据输出。
这里相当于我在这个后面不断的等待,循环达到我所需要的目的,最后解决这个异步的问题。
当然,方法有很多,希望大家能跟我分享分享,共同进步
时间: 2024-11-10 01:10:21