2016-08-04 4 views
0

Dies ist ein vereinfachtes Beispiel dessen, was ich gerade durchmache.Nur module.exports zurückgeben, sobald npm.load Callback zurückgegeben wird

index.js

var config = require('../config.js'); 
console.log(config.globalModules); //undefined 

config.js verwendet ein externes Paket (npm) bevölkert sein module.exports Objekt zu helfen.

config.js

var npm = require('npm'); 
var glob = require('glob'); 

module.exports = {} 

// The majority of methods rely on properties which are not set until npm.load has been called. 

npm.load(function (er) { 
    // now i can use npm properties and methods 
    module.exports.globalModules = glob.sync('*', { cwd: npm.globalDir}) 
    module.exports.localModules = glob.sync('*', { cwd: npm.dir}) 
}); 

Ich habe hier alle async/sync Rückruf Fragen gelesen und haben versucht, dieses Problem zu lösen, indem ein synchrones Paket verwenden, aber gescheitert. Ich habe versucht, sync und wait.for zu verwenden, aber var config gibt immer noch ein leeres Objekt zurück.

Wie stelle ich sicher, dass var config aka (module.exports) vollständig ausgefüllt ist, wenn config.js erforderlich/zurückgegeben wird.

+0

Es ist nicht möglich. Überdenken Sie Ihre Modularchitektur. Tipp: Mach jQuery Ninja Modus und habe eine Art '.ready()' Funktion für dein Modul. Es exportiert etwas wie '.init (Callback)', das Ihnen erlaubt, das Modul zu verwenden, nachdem die async Funktionen abgeschlossen sind. – slebetman

Antwort

0

npm.load kehrt lange vor seiner Callback-Funktion wird so module.exports.globalModulesgesetzt, nachdem Sie es mit console.log drucken. Sie können setTimeout() verwenden, um eine gewisse Verzögerung für die zeitgerechte Fertigstellung festzulegen.

Verwandte Themen