[NodeJs]拿不到mysql查询返回的数据?你可能还没试过这招
[NodeJs]拿不到mysql查询返回的数据?你可能还没试过这招
- 解决
nodejs
分离mysql
模块后,能在模块内console.log
出数据,主模块却拿不到的问题
导读
- 缘由
- 解决方案
缘由
- 曾经在刚刚初学
nodejs
的时候,就想要把nodejs
和mysql
链接起来;于是便在网络上简单学习了nodejs
链接mysql的教程,但当时所有代码都挤在一个app.js
里面,但当我去将mysql
的模块专门从app.js
中抽离的时候,问题发生了。(今天拿一个简单的小项目来举例) - 这样的写法,虽然能够
console.log
出数据,但是app.js
是接收不到的(通过console.log
逐步查找出来的原因),因此我们去访问这个接口,也拿不到任何数据
- 虽然知道这大几率是异步的问题,但处理起来还是令人头疼
- 因为这样的问题,大多都是执行函数,但
result
还没有被查询到并赋值,函数就已经给我返回了result
- 这里的执行顺序是,访问接口,触发
getdata()
函数,然后将返回值发送 - 而这里的执行顺序就比较有意思了,先是进入函数,然后进入db.query的函数体,此时
result
还没有被查询到,log也被略过,直接先执行了return
,然后就返回了一个未被定义的空值
- 如果你细心,去挨个调试输出也能发现这个奇妙的问题。
- 而且,data 居然是先输出了
undefined
,而查询结果却在后面;显然,这是执行顺序的锅。
-
按照正常的逻辑,这些数据需要我每访问一次就从数据中查询一次,如果直接将查询过程变为一次性的(每次启动服务的时候才会重新去sql查询),那么就可以解决问题,但这怎么看,也不像解决了问题,很多数据是需要立即获取的,比如说很多实时更新的信息,这时候你想要通过重启服务才能查看最新信息,很显然是不现实的。
-
一时间,陷入僵局。。。
解决方案
-
因为这个问题,我翻阅了其他人上百篇的博客,发现此类的极少,因为他们做演示的时候大多都是在一个 app.js文件下执行的,根本没有分离的过程,也没有这样的问题。
-
但功夫不负有心人,通过国外的几篇问题贴,我强忍着翻译后生硬的话语,去看出了其中的玄机。
-
直接获取不到的结果,可以通过回调函数来返回。
-
改造。。。。
-
改造后的代码如下
6. 在写法上的确和之前有了变动,这次我们再次打开浏览器,数据跃然屏上