node-mysql 如果一个请求里包含多个查询,怎么写比较合适呢?
发布于 13 年前 作者 cuimuxi 6127 次浏览 最后一次编辑是 8 年前 来自 问答

由于NODE的异步特性,两个query 如果是平行的,返回结果就不确定了,在模板中无法取到对应的数据。如果使用闭包又很别扭

比如:

 db.query('select * from xxx limit 1' function(err, rows){
      //do something
     db.query('xxx", function(err,another_rows){
     //do another thing
   });
 });

这样的写法虽然也能达到效果,但一个页面假设10个查询,这样就嵌套了10层,总觉得太恶心,是不是有更好的方式? 我刚用这个东西,不太懂,忘各位指点

10 回复

后一个query依赖前边的query的执行结果么?要是不依赖,就用EventProxy;有依赖的话,自己封装事件吧。

有依赖的就用Jscex嘛

  • 确定要在数据查询层做同异步嘛?可以考虑在业务层啊。
  • 数据层用DAO模型只做数据操作的好,然后具体的业务位于上一层,同异步在这里做,可以用到的库就很多了,如eventproxy、async、Jscex等。

我不是要做异步,而是刚入门不知道方向,感谢各位指点

step就搞定了。

@sumory Jscex 已经没用了

用async,网上有例子

对于异步操作,我更倾向于使用 promise api 包装,比如使用 Q (npm install q) https://github.com/kriskowal/q 这样的话代码容易组织并且很容易控制以实现顺序执行或者并发执行或者 部分顺序 部分并发。 EventProxy, async 也不错,思路都差不多, 这两个在api语义上更友好一些, 但是promise API 是ES6的一个新特性,提前熟悉下也好。

最好的办法:优化SQL,一次性全查出来

回到顶部