내보내기는 기능 외부에 있기 때문에 작동하지 않습니다. 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);
} else {
callback = cb;
}
}
여기 async.function 은 비동기 호출을 상징하는 자리 표시 자입니다.
메인
var fooMod = require('./foo.js');
fooMod(function(foo){
});
다중 콜백 방법
모듈을 두 번 이상 호출해야하는 경우 콜백 배열을 관리해야합니다.
var foo, callbackList = [];
async.function(function(response) {
foo = "foobar";
for(var i = 0; i < callbackList.length; i++){
callbackList[i](foo)
}
});
module.exports = function(cb){
if(typeof foo != 'undefined'){
cb(foo);
} else {
callback.push(cb);
}
}
여기 async.function 은 비동기 호출을 상징하는 자리 표시 자입니다.
메인
var fooMod = require('./foo.js');
fooMod(function(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){
});
Promise 문서 참조