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函数才会执行完。
类似这种,涉及到阻塞,但类库自身却是用异步回调解决的问题,我们应该怎样处理?
已经学到的方法
- 继续传递一个回调函数(如果是web应用,可传递response),一环扣一环,这样代码臃肿,逻辑混乱。
- 设置标记位,但只适用单实例查询的场景。
- 使用node插件,step或async。 大家一般会用什么方法,来解决这样的常见问题? 我更倾向于step和async,因为其他JS(前端类库)也使用过类似的标记去强制控制异步为同步状态。但网上step和async的资料太少,我现在还不清楚step的用法。 求助…谢谢~