2016-07-11 6 views
2

의 fs.readFile의 콜백에 추가 매개 변수 전달 fs.readFile의 콜백 함수에 추가 매개 변수를 전달할 수 있습니까? 디렉토리를 읽고 모든 XML 문서를 파싱하는 코드가 있습니다. 추가 처리를 위해 파일 이름을 콜백 체인 아래로 전달해야합니다. 지금부터 내 코드는노드 js

var fs = require('fs'); 
var path = require('path'); 

module.exports.extractXMLBody = function (dirPath, ext) { 
    fs.stat(dirPath, function (err, stats) { 
     if (stats.isDirectory()) { 
      fetchFiles(dirPath, ext, function (listOfFiles) { 
       _.each(listOfFiles, function (val, key) { 
        var completePath = dirPath + '/' + val; 
        var fileName = path.basename(val, path.extname(val)) 
        // TODO : Figure out to pass additional parameters 
        fs.readFile(fullPath, parseXML); 
       }); 
      }); 
     } 
    }); 
} 
다음 parseXML

내가 별도의 기능 내가 콜백 함수 parseXML에 변수 newFileName를 전달하려는 &로 정의 된 콜백입니다.

참고 : 콜백을 익명 함수로 작성하면 변수에 대한 액세스를 전달할 수 있지만 콜백을 추가로 중첩시키지 않으려 고합니다.

답변

2

아니오, fs.readFile()으로 지원되지 않으므로 추가 값을 콜백 함수에 전달할 수 없습니다. 콜백 함수에는 항상 2 개의 값만 전달됩니다. error-first callback 구조를 따르므로 첫 번째 매개 변수는 Error이거나 하나가 발생하지 않았 으면 null이고 다음 인수는 파일의 데이터를 포함합니다 (있는 경우).

fs.readFile()에 대한 콜백 내의 변수 fileName에 액세스하려는 경우 fs.readFile()이 호출되는 동일한 범위 내에서 정의해야합니다. 이것은 어느 정도 익명의 기능을 요구합니다. 그러나 더 나은 오류 StackTraces를 위해 이름을 지정해야합니다.

_.each(listOfFiles, function (val, key) { 
    var completePath = dirPath + '/' + val; 
    var fileName = path.basename(val, path.extname(val)); 

    fs.readFile(fullPath, function parseXML(err, data) { 
    if(err) { 
     console.log(err); 
    } 
    else { 
     // parseXML and still have access to fileName 
    } 
    }); 
}); 
+0

저에게 나쁜 소식입니다. 익명의 기능을 수행 할 수밖에 없습니다. –