zoukankan      html  css  js  c++  java
  • nodejs 数据库查询异步处理

           古人云:代码有问题,怎么办??找我啊,。。嘿嘿嘿

    最近写代码遇到了这么一个问题在用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监听我们的数据是否的整合完整,完整之后就将数据输出。

    这里相当于我在这个后面不断的等待,循环达到我所需要的目的,最后解决这个异步的问题。

    当然,方法有很多,希望大家能跟我分享分享,共同进步

  • 相关阅读:
    BZOJ 1050 旅行
    BZOJ 1040 骑士
    BZOJ 1038 瞭望塔
    BZOJ 1037 生日聚会
    BZOJ 1823 满汉全席
    BZOJ 3091 城市旅行
    CF702E Analysis of Pathes in Functional Graph
    Luogu 2154 [SDOI2009]虔诚的墓主人
    Luogu 1268 树的重量
    Luogu 4867 Gty的二逼妹子序列
  • 原文地址:https://www.cnblogs.com/Pongtao/p/7016871.html
Copyright © 2011-2022 走看看