从数据库获取初始的数据,如果使用异步将导致所有依赖这些数据的代码全部写为嵌套在Promise或Async,有没有好的办法
发布于 6 年前 作者 huenyifei 1735 次浏览 来自 问答

数据库保存了很多集装箱的相关信息,在网站启动时我就希望读取这些信息到内存,因为整个网站的应用会非常频繁的查询这些信息。 从数据库获取数据一定是异步的,这就不能确保我查询集装箱信息时,这些信息一定在内存里。 如果这些方法使用了异步(不管是Promise还是async)那么所用用到的这些方法,都必须也是异步的。 这让我觉着非常困扰。而且感到极其不舒服 第一,有些方法很小,只要能保证内存载入了集装箱信息,它就能很快的返回,如果做成异步真的让人觉着很奇怪 第二,你可能还要告诉调用这些方法的人,这个方法是同步还是异步 我使用了child_process.execFileSync让这些异步的方法真正同步,这样就保证了网站在启动时就把数据读取到内存。 但是, 我也是个初学者,我感觉得我的这种做法非常不专业。是不是nodejs里面有一种好的接口设计方法能解决这类问题。 你们做项目时一定会遇到这类问题,通常如何解决呢(难道真的要把所有依赖数据库数据的方法做成异步吗?)

2 回复

express中有没有什么配置,可以让一些代码在初始化时就被加载?就像Servlet在部署描述符里配置<load-on-startup>1</load-on-startup>使某些Servlet在Tomcat启动时就被加载

你是想在服务启动时加载一些配置数据到内存是吧?express里没注意到有这种中间件。 或许是因为太简单了,你只需要在load完你的数据(无论同步异步)后,再进行listen即可。其他如servlet的web.xml等配置文件其实原理也一样。 J2EE那一套太重太依赖配置了,搞得很多J2EE开发者没有配置会无所适从,也让很多初学者面对一大堆配置文件莫名其妙。

来自✨ Node.js开源项目精选

回到顶部