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监听我们的数据是否的整合完整,完整之后就将数据输出。

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

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

时间: 2024-09-08 23:03:24

nodejs 数据库查询异步处理的相关文章

第九十九天上课 PHP TP框架 数据库查询和增加

在Model文件夹下创建模型,文件命名规则 : 表名Model.class.php <?php namespace Home\Model; use Think\Model; class yonghuModel extends Model { } 实例化数据库的三种方法 //调用Model文件夹下的模型 public function shujuku1() { $yonghu=new \Home\Model\yonghuModel; //实例化自己创建的Model,(注意路径书写完整) var_d

基于py3和pymysql的数据库查询,查询某几列的数据

#python3 #xiaodeng #基于py3和pymysql的数据库查询,查询某几列的数据 import pymysql conn=pymysql.connect(....) cur=conn.cursor() cur.execute("select name,age from nlist") data=cur.fethall() for name,age in data: print name,age conn.close() cur.close()

Delphi多线程数据库查询(ADO)

ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoInitialize和CoUninitialize.调用CoInitialize失败会产生"CoInitialize was not called"例外. 2.画布不允许绘画(Canvas does not allow drawing):所以,必须通过Synchronize过程来通知主线程访问主窗体

SQL数据库查询方法

SQL数据库查询方法 简单查询: 一.投影 select * from 表名 select 列1,列2... from 表名 select distinct 列名 from 表名 二.筛选 select top 数字 列|* from 表名 (一)等值与不等值 select * from 表名 where 列名=值 select * from 表名 where 列名!=值 select * from 表名 where 列名>值 select * from 表名 where 列名<值 selec

T端带数据库查询的假人系统

commit 87f8ac21ca6d2d086984dfc39b1869dc51ecd36f Author: Vitasic <[email protected]> Date: Tue Jun 26 15:43:38 2012 +0400 Add Fake Players diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 966eae5.

数据库查询服务框架

原本是为了验证前面的通信框架,在不知不觉的2个月中,越写越大. 既然写了就简单介绍下 数据库查询,主要是客户端发送sql语句到服务端,服务端查询完成以后将数据返回 客户端DBClientManager类中封装了一般的sql查询方法,按照c#的方式封装的,只需要调用不同的方法则返回不同的数据: 一般的查询均返回DBResult对象,里面的Result字段对应返回数字,表结构DataTableJson对象: 当然也可以返回sqldatareader对象,其原理是分步返回而已 构造的存储结构是按照列存

用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量.<s:iterator>标签有一个value属性,用来存放在Action类的方法中存数据的list集合,还有一个id,好像是说指定集合的索引的意思,就是给list集合遍历出来的每个对象加上一个数字标签,反正我是这么理解的,没用过.还有一个很重要,就是var变量,我在s:iterator按ctr

SQLServer性能优化之 nolock,大幅提升数据库查询性能

公司数据库随着时间的增长,数据越来越多,查询速度也越来越慢.进数据库看了一下,几十万调的数据,查询起来确实很费时间. 要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑.其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能. 不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成Dirty Read,就是读到无效的数据.

SQL Server 跨数据库查询

不同服务器数据库之间的数据操作 --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时