MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Tudo bem inicializar as exportações de forma assíncrona em um módulo node.js?


Você não pode gravar em exports depois de deixar o arquivo. Você deve estar bloqueando. Para evitar o bloqueio, eu usaria o carregamento lento de recursos.
var carCol;
var carEmitter = new require("events").EventEmitter;


exports.getCars = function(callback) {
  // if no car collection then bind to event
  if (carCol === undefined) {
    carEmitter.on("cars-ready", function() {
      callback(carCol);
    });
  } else {
    // we have cars, send them back
    callback(carCol);
  }
}

db.collection("cars", function(err, col) {
  // store cars
  carCol = col;
  // tell waiters that we have cars.
  carEmitter.emit("cars-ready");
});

Use emissores de eventos para emular o carregamento lento. Você pode querer generalizar para um LazyLoadedCollection class/object para deixar o código mais limpo/mais DRY.