MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Ist es in Ordnung, Exporte asynchron in einem node.js-Modul zu initialisieren?

Sie können nicht in exports schreiben nachdem Sie die Datei verlassen haben. Sie müssen blockieren. Um eine Blockierung zu vermeiden, würde ich Lazy Loading von Ressourcen verwenden.

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

Verwenden Sie Ereignisemitter, um verzögertes Laden zu emulieren. Möglicherweise möchten Sie zu einer LazyLoadedCollection verallgemeinern Klasse/Objekt, um den Code sauberer/trockener zu machen.