Node.js怎样response:循环执行多个sql查询语句后的结果集

always-one 2014-07-21 06:49:45
我在函数外定义一个全局变量的数组来接收每次查询的得到的结果,然后再把这个结果response回去;由于Node.js是异步i/o的,还没等到查询结果出来就执行了后面response的代码,导致一直返回为null。    
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(在sql查询的函数的回调函数里可以response对应查询到的数据。但是不能response循环多个sql查询的结果集)
代码贴不上来,工作的机子没网络,只把代码的逻辑大概写下

for(var i=0;i<len;i++){
var sql='select '+len[i]+' from user';//每个sql需要匹配的字段是len数组中的一个元素,这不是原来的sql,算是相似的例子
dbc.query(sql,function(err,data){
//data是一个sql查询得到的结果
});
}

//本来想着在返回data的回调里用全局的一个数组push这些数据的,结果返回为空。求解决办法或者思路,自己折腾很久没搞出来。


...全文
657 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
always-one 2014-07-25
  • 打赏
  • 举报
回复
引用 8 楼 apple8160 的回复:
node都是异步走的 如果使用同步应该可以的吧 不知道跟你的办法哪个好点 估计差不多 无法帮到你拉
实在想不到其他办法了,只能将就用着
apple8160 2014-07-25
  • 打赏
  • 举报
回复
node都是异步走的 如果使用同步应该可以的吧 不知道跟你的办法哪个好点 估计差不多 无法帮到你拉
always-one 2014-07-24
  • 打赏
  • 举报
回复

var list=[];
for(var i=0;i<len;i++){
  //每个sql需要匹配的字段是len数组中的一个元素
  var sql='select '+len[i]+' from user';
  (function(sql,i,len){
  dbc.query(sql,function(err,data){
     //data是一个sql查询得到的结果
    list.push(data);
    if(i==len-1){
      callback(list);
    }
  });
  }(sql,i,len);
}
always-one 2014-07-24
  • 打赏
  • 举报
回复
引用 5 楼 apple8160 的回复:
循环后在回调吖 你是不是循环中回调了? 不知道是不是我没理解你的意思
你的意思是在循环外面写回调是吧?这样我试过了,会返回为空的,原因是:程序不等回调结果出来就执行了回调。后来我用了一个这样的方法:在query方法里面判断循环的次数,等循环执行结束就调用回调。虽然是实现了需求,但是感觉实现方式不是很好,不知道有没有更高效便捷的方法。
apple8160 2014-07-23
  • 打赏
  • 举报
回复
循环后在回调吖 你是不是循环中回调了? 不知道是不是我没理解你的意思
always-one 2014-07-22
  • 打赏
  • 举报
回复
引用 3 楼 apple8160 的回复:
循环代码应该没问题吖 你把结果集添加到数组或者组成字符串 然后callback(字符串) 后者先打印出结果集看看
试过了,但是不可以。代码会根据循环的次数打印同样的次数。因为循环执行了每次查询都会执行一次这个回调函数。
apple8160 2014-07-22
  • 打赏
  • 举报
回复
循环代码应该没问题吖 你把结果集添加到数组或者组成字符串 然后callback(字符串) 后者先打印出结果集看看
always-one 2014-07-22
  • 打赏
  • 举报
回复
引用 1 楼 z526283019 的回复:
试试async http://freewind.me/blog/20120515/917.html 或者 引入一个模块 把数挂在这个模块上呢? 我对Node也不是很熟、、、我的想法。。。
看过async这个模块的api,找不到合适的解决办法
小白菜string 2014-07-22
  • 打赏
  • 举报
回复
试试async http://freewind.me/blog/20120515/917.html 或者 引入一个模块 把数挂在这个模块上呢? 我对Node也不是很熟、、、我的想法。。。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧