MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Est-il acceptable d'initialiser les exportations de manière asynchrone dans un module node.js ?

Vous ne pouvez pas écrire dans exports après avoir quitté le fichier. Vous devez bloquer. Pour éviter d'être bloquant, j'utiliserais le chargement paresseux des ressources.

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");
});

Utilisez des émetteurs d'événements pour émuler le chargement différé. Vous voudrez peut-être généraliser à une LazyLoadedCollection classe/objet pour rendre le code plus propre / plus DRY.