求教一个有关node同步场景的问题...
发布于 13 年前 作者 workhard 5082 次浏览 最后一次编辑是 8 年前

var executeQuery = function(sql){ var client = getClient();//外部获取一个client var result = null; client.query(sql,function(error,results,fields){ if(error){ console.log('Query error ' + error.message); result = null; return; }else if(results.length > 0){ console.log('Query success ' + sql); result = results; } }); return result; } 在client.query中,传入了匿名回调函数。这样就会造成没有等待回调函数执行完,executeQuery函数就会自动结束。~~稍后query函数才会执行完。 类似这种,涉及到阻塞,但类库自身却是用异步回调解决的问题,我们应该怎样处理? 已经学到的方法

  1. 继续传递一个回调函数(如果是web应用,可传递response),一环扣一环,这样代码臃肿,逻辑混乱。
  2. 设置标记位,但只适用单实例查询的场景。
  3. 使用node插件,step或async。 大家一般会用什么方法,来解决这样的常见问题? 我更倾向于step和async,因为其他JS(前端类库)也使用过类似的标记去强制控制异步为同步状态。但网上step和async的资料太少,我现在还不清楚step的用法。 求助…谢谢~
5 回复

继续回调是node.js设想的解决方法,这个总要用的。 用异步可以让代码写起来更加顺畅和连贯。异步要用库的,可以试试老赵的jscex

谢谢…网上看到step和async你了解么? 我现在去实时这个jscex…第一次听,谢了

node.js 是要尽量避免阻塞的。node.js的精髓就是callbacks。所以我建议用callbacks,否则,你的程序不适合用node.js来实现。代码简练和臃肿是和你的实现相关的。

我一直是做Java的,对回调的理解真的不深,可能是思维固化了。以前Javascript有一些基础,但毕竟刚刚学了node.js一周。 加入我设计一个API系统,整个node与页面无关,只负责处理数据,和response返回json。 那我就需要在控制层或者路由中,获取到从数据库查询的结果,然后将结果response到前端,那如果这样,我就一定要在控制层得到一个返回值,但现在mysql模块使用的query也是基于异步回调,我不知道怎么正常难道返回值。想拿到返回值,阻塞可能是不可避免的。

async我用了一阵子了,感觉不是很满意。比较繁琐,问题多,在client端也没有真正异步起来。

这两天在试jscex,感觉还没入门。

回到顶部