foo
宣言が内部にあるときに関数の外にあるため、エクスポートが機能しません。しかし、エクスポートを内部に置くと、モジュールを使用するときに、エクスポートが定義されているかどうかを確認することはできません。
ansyncシステムで作業する最善の方法は、コールバックを使用することです。コールバックを取得するためにコールバック代入メソッドをエクスポートし、非同期実行時に呼び出す必要があります。
例:ここでは
var foo, callback;
async.function(function(response) {
foo = "foobar";
if(typeof callback == 'function'){
callback(foo);
}
});
module.exports = function(cb){
if(typeof foo != 'undefined'){
cb(foo); // If foo is already define, I don't wait.
} else {
callback = cb;
}
}
async.function
は、非同期呼び出しを象徴するだけのプレースホルダです。メイン
var fooMod = require('./foo.js');
fooMod(function(foo){
//Here code using foo;
});
で
複数のコールバック方法
あなたのモジュールを使用すると、コールバックの配列を管理する必要が複数回呼び出される必要がある場合:
var foo, callbackList = [];
async.function(function(response) {
foo = "foobar";
// You can use all other form of array walk.
for(var i = 0; i < callbackList.length; i++){
callbackList[i](foo)
}
});
module.exports = function(cb){
if(typeof foo != 'undefined'){
cb(foo); // If foo is already define, I don't wait.
} else {
callback.push(cb);
}
}
ここasync.function
非同期呼び出しを象徴するプレースホルダです。あなたはまた、それを解決するための約束を使用することができ、メイン
var fooMod = require('./foo.js');
fooMod(function(foo){
//Here code using foo;
});
約束方法
で
。約束の設計によるこの方法のサポート、複数のコール:ここ
var foo, callback;
module.exports = new Promise(function(resolve, reject){
async.function(function(response) {
foo = "foobar"
resolve(foo);
});
});
async.function
は、非同期呼び出しを象徴するだけのプレースホルダです。メイン
var fooMod = require('./foo.js').then(function(foo){
//Here code using foo;
});
で
はPromise documentation
存在しないファイルでnconf.file()が呼び出された場合、実際の使用事例で遊んでいて、nconfがうまくロードされるため、解決策は必要ありません。しかし、まだアプローチに興味があります。 – Brett
私は同じ質問がある、私は約束をエクスポートすることができ、 'require'は依存関係を非同期にロードする。私はそれがバベルのフォーマッターで可能だと思います。しかし、私はこれらのための良い解決策とは思わない。 : –