2016-08-04 7 views
0

これは私が現時点でどのようなことを行っているかの簡単な例です。npm.loadコールバックが返されて初めてmodule.exportsを返します

index.js

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

config.jsのそのmodule.exportsオブジェクトを移入支援するために、外部パッケージ(npm)を使用しています。

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はまだ空のオブジェクトを返しています。

config.jsが必須/返品の場合、var config別名(module.exports)が完全に入力されていることを確認するにはどうすればよいですか。長い間、コールバック関数の前に

+0

これはできません。モジュールアーキテクチャを再考してください。ヒント:jQueryの忍者モードが好きで、あなたのための一種の '.ready()'関数があります。これは '.init(callback)'のようなものを輸出し、非同期関数の完了後にモジュールを使用できるようにします。 – slebetman

答えて

0

npm.load戻り、そうmodule.exports.globalModulesはあなたがconsole.logでそれを印刷した後に設定されています。 setTimeout()を使用すると、完了までにある程度の遅延を設定できます。

関連する問題