MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

È possibile inizializzare le esportazioni in modo asincrono in un modulo node.js?

Non puoi scrivere su exports dopo aver lasciato il file. Devi bloccare. Per evitare di essere bloccato, userei il caricamento lento delle risorse.

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

Usa gli emettitori di eventi per emulare il caricamento lento. Potresti voler generalizzare a un LazyLoadedCollection classe/oggetto per rendere il codice più ordinato/più ASCIUTTO.