sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Está bien inicializar las exportaciones de forma asíncrona en un módulo node.js?

No puede escribir en exports después de haber dejado el archivo. Debes estar bloqueando. Para evitar el bloqueo, usaría la carga diferida 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");
});

Utilice emisores de eventos para emular la carga diferida. Es posible que desee generalizar a una LazyLoadedCollection clase/objeto para hacer el código más limpio/más SECO.