2016-08-04 76 views
0

這是我目前經歷的一個簡化例子。只返回module.exports一次npm.load回調返回

index.js

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

config.js使用外部封裝(npm),以幫助填充其module.exports對象。

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

我看了所有的異步/同步回調的問題在這裏,並試圖通過使用同步方案,但都未能解決這個問題。我曾嘗試使用syncwait.for,但var config仍然返回空對象。

如何確保var config又名(module.exports)在需要/返回config.js時完全填充。

+0

這是不可能的。重新思考你的模塊體系結構。提示:像jQuery忍者模式一樣,併爲你的模塊提供一種'.ready()'函數。它導出類似'.init(callback)'的東西,它允許你在異步函數完成後使用模塊。 – slebetman

回答

0

npm.load回報長的回調函數之前,所以module.exports.globalModules設置你以後再console.log打印。 您可以使用setTimeout()設置一些延遲,以便及時完成。