相关疑难解决方法(0)

Node.js模块的异步初始化

我想以异步方式初始化模块并提出一些想法.我需要带有来自Mongo和其他数据的集合列表的DB对象,但是./为了简洁起见,文件列表也是如此.

我无法导出函数或类,因为我需要require('db')每次都返回相同的对象.


首先也是最简单的东西来到我的脑海里是分配module.exportsObject后来填充它:

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)

javascript asynchronous node.js

21
推荐指数
2
解决办法
2万
查看次数

标签 统计

asynchronous ×1

javascript ×1

node.js ×1