您的导出无法工作,因为foo
声明在内部时,它在函数外部。但是,如果将导出文件放在其中,则在使用模块时,不能确保已定义导出文件。
使用异步系统的最佳方法是使用回调。您需要导出回调分配方法以获取回调,并在异步执行时调用它。
例:
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;
});
您也可以使用Promise解决此问题。此方法通过Promise的设计支持多次调用:
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文档