由于回调,使node.js与通常开发方式有所不同...详见内容。
发布于 13 年前 作者 workhard 7328 次预览 最后一次回复是 13 年前 来自
正常进行服务端编程,当然会包括数据库的in和out… 但在使用Java或C#等进行服务端开发时,我们一般会建立一个DAO层来处理所有与DB操作相关的逻辑。 但node.js是基于回调的,node.js现在的mysql包也是使用回调的,这就有一个很明显的问题,返回结果会在异步回调函数之前执行,造成了返回结果为空。 不只这里有问题,安装正常服务端开发的逻辑,控制层或起调度分派作用的逻辑,同理当然也无法获得返回值。
如果摒弃Java或C#常规开发思想,让node.js后台使用回调会有几种方式来解决这个问题: 1,增加标记位,判断是否完成回调后,在进行返回结果——如果是只有一次或几次查询很简单,建立几个标记位即可,可是web开发,面临的不是几次查询那么简单。 2,使用轮询判断回调是否完成,浪费资源。 3,使用插件step,async等来进行同步控制。 4,回调的更彻底一些,把response作为参数传递到业务逻辑中,耦合性也太强了吧…
我刚刚接触node.js没多久,遇到这个问题很困惑,期待大家帮我来帮助我解决或者和一起来探讨这个问题
8 回复
在感叹node.js异步强大的同时,也在慨叹它给同步需求带来的烦恼,我现在也是用插件来控制的
可是想到,node.js就是靠异步来赚取效率的…就很纠结。 如果把回调同步,那我还不如回去用Java呢~ 你在用什么插件呢??
改变想法,抛弃
MVC传统的思想 控制权转移流程由:改成
这个应该才是
mvc的核心思维吧@workhard
我理解你的意思是这样的: controller接收请求后进行调度,然后就没它什么事了…随后在进行其他业务逻辑处理,直至返回结果。 原来的controller是等待model返回结果… 我的理解对么?
@workhard 嗯。不过目前还没有哪个框架能很好的解决这个问题。
@jankuo 如果按照这个request > web server > controller > model > view > response 思路,只有自己搭建框架了…不过现在的思想一时间还转不过来…一直做传统意义上的后端开发,学习ing…
@sumory
我没细看,只知道有async这么回事…