求学NodeJs的第一个星期,快被折磨死了,快放弃了,这玩意咋这么难学。Java的框架一两天就上手,这NodeJs尼玛是对自我的重新认识的利器啊。
为了避免大家常说的“回调陷阱”或“回调黑洞”。 我只是想实现根据第一步DB操作的结果来判断是不是要进行第二步DB操作,就这样,很简单。 问题来了, Q 、 async 等等一堆一下击败了我的弱脑。
能不能求大神给个痛快的,用什么实现都行。 如果用promise,那我访问数据库那一层要写成什么样子才能让上层.then。 如果用async,前一步的返回是后一步的输入,看不懂啊,怎么传给后一步的啊。
能不能给个代码示例啊! 泪水喷涌裸体奔跑中~~~~~。
下面是我查询数据库的代码片段: exports.checkUser = function(user, handler) { db.execQuery({ "sql": "select * from user_info where user_name = ?", "args": [user.userName], "handler": handler }); };
@wuliao49 关键是逻辑混乱。如果要实现注册用户,那要先校验用户是否存在。 userModel.checkUser(user, function (result, error) { … …} userModel.insert(user, function(result, error) {… …} 这里插入操作可能在校验之前。 如果把insert写到check里面,也是可以,由于个人原因,这么写会让我烦躁的难以入睡。 a() { b() { c(){ 。。。。 就这样一直的美下去? } } }
@wowxhycoming 我觉得这样求助会比较方便快捷,等代码的话估计可能行不大https://www.google.com.hk/#hl=zh-CN&q=site:cnodejs.org+%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6
首先,先不说流程控制,按照node的理念,insert是要写到check里面的。 如果简单的2,3层回调都不能接受的话,说明你要么太执念,要么完全不适应异步,趁早放弃。
其次 node里面又不是完全异步,大部分异步都是和IO相关的。 你这种简单的业务场景,撑死了就3成回调,我觉得完全可以接受。 离我们通常说的“回调地狱”差了十万八千里,
如果你接受,而且觉得自然的话,那么可以往下学了。 你这个等你实现很复杂的逻辑的时候,你就发现异步这种方式有缺陷。 需要采取流程控制来解决大规模回调。等你到这步,估计你已经知道怎么做了。 哪些所谓的Q 、 async等等,无非就是语法糖而已。你看哪个爽就哪个 你用哪个 或者自己写一个,或者采取别的方式 ,按照你习惯的来,甚至你可以直接用node原生的eventemit。 无所谓,没有高下之分。