考虑一个例子:我有以下express.js
应用程序(请参阅下面的代码片段).我希望在整个应用程序生命周期中有一个与DB的持久连接,以及一个与我自己的服务的持久连接(需要异步调用才能启动).还有一些入口点,即不仅可以通过HTTP协议访问我的应用程序.当然,我想避免服务初始化代码重复,并且可能有几个这样的异步初始化服务.
/* app.js */ var app = require('express')(); // set views, use routes, etc. var db = require('monk/mongoose/etc')(...); // happily, usually it's a sync operation var myService = require('./myService'); // however, it's possible to have several such services myService.init(function(err, result) { // only here an initialization process is finished! }); module.exports.app = app; /* http_server.js (www entry point) */ var app = require('app'); // create an HTTP server with this app and start listening /* telnet_server.js (other entry point) */ var app = require('app'); // create a Telnet server with this app and start listening
在上面的代码片段中,当http(或telnet或任何其他)服务器启动时,无法保证myService
已经初始化.
所以,我必须以某种方式重新组织我的应用创建代码.现在我坚持下一个解决方案:
/* app.js */ var app = require('express')(); module.exports.app = app; module.exports.init = function(callback) { var myService = require('./myService'); myService.init(callback); } /* entry_point.js */ var app = require('app'); app.init(function(err) { if (!err) { // create an HTTP/Telnet/etc server and start listening } });
所以,我的问题是:初始化服务需要异步调用启动的常用方法是什么?