我想以异步方式初始化模块并提出一些想法.我需要带有来自Mongo和其他数据的集合列表的DB对象,但是./为了简洁起见,文件列表也是如此.
我无法导出函数或类,因为我需要require('db')每次都返回相同的对象.
首先也是最简单的东西来到我的脑海里是分配module.exports给Object后来填充它:
var exports = {};
module.exports = exports;
require('fs').readdir('.', function(err, files) {
exports.error = err;
exports.files = files;
});
Run Code Online (Sandbox Code Playgroud)
不好的事情 - 当列表准备就绪并且没有检查错误的好方法时,我真的不知道从外面.
我搞砸的第二种方法是继承EventEmitter并通知每个人DB已准备好或发生错误.如果一切正常 - 继续.
var events = require('events');
var util = require('util');
function Db() {
events.EventEmitter.call(this);
this.ready = false;
this.files = null;
this.initialize();
}
util.inherits(Db, events.EventEmitter);
Db.prototype.initialize = function() {
if (this.ready)
return this.emit('ready');
var self = this;
require('fs').readdir('.', function(err, files) {
if (err) …Run Code Online (Sandbox Code Playgroud)