노드와 비동기식으로 상호 작용하고 콜백 및 인터넷 검색 작업을 수행하는 데 몇 가지 문제가 있습니다. 나는 마침내 너희들을 바라본다.'readline'을 사용하여 node.js 프로그램에 대한 동기 실행
노드의 readline 모듈을 사용하여 파일에서 줄을 읽어야하는 프로그램이 있습니다. 이 파일에는 노드 프로그램 내에서 정의 된 일부 비동기 함수에 전달되는 데이터가 들어 있습니다. 모든 데이터가 성공적으로 읽고 처리되면이 데이터를 JSON 형식으로 파싱 한 다음 출력해야합니다.
내 문제는 여기서 내가 호출 할 때 : readLine.on('close', function() { ...... }
비동기 함수가 실행되기 전에 실행되므로 아무 것도 출력되지 않지만 프로그램이 비동기 함수를 계속 실행합니다.
좀 더 명확하게 내 상황을 설명해야한다 기능의 간단한 골격을 만든 : 내가 처음/secondAsynFunction에 콜백을 추가하기 위해 노력했다
function firstAsyncFunc(dataFromFile) {
//do something asynchronously
return processedData;
}
function secondAsyncFunc(dataFromFile) {
//do something else asynchronously
return processedData;
}
//create readline
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('data.txt')
});
//array to hold all the data processed
var totalDataStorage;
//read file
lineReader.on('line', function(line) {
var processedData = firstAsyncFunction(line);
var moreProcessedData = secondAsyncFunction(line);
//store processed data and concatenate into one array
var tempDataStorage = [{ 'first': processedData, 'second': moreProcessedData }]
totalDataStorage = totalDataStorage.concat(tempDataStorage);
}).on('close', function() {
var JSONString = JSON.stringify(... //create JSON for totalDataStorage ...);
console.log(JSONString); //DOESN'T OUTPUT ANYTHING!
});
을, 나는 읽기와 분석을 만들기 위해 노력했다 조금씩 프로그램의 분리 된 함수를 만들고, 콜백을 작성하여 읽기가 끝났을 때 구문 분석을 호출하기 만하면되지만, 그 솔루션은 작동하지 않는 것 같고 정말 고민 중입니다.
감사합니다.
편집 : data.txt라는 파일 형태
IPData1 DataCenter1
IPData2 DataCenter2
...
IPDataN DataCenterN
나는 각각의 값을 얻을하고 적절하게 전달하는 str.split를 ("")를 사용이다. IPData은 숫자이며, 데이터 센터는 문자열
당신은 data.txt라는 파일을 공유 할 수 있습니까? 나는 너에게 대답 할 수 있다고 믿는다. – Bamieh
@JaromandaX OP의 코드를 다시 보아라. 문자열이 아니라 배열입니다. –
data.txt 파일의 형식은'IPData, DataCentre'입니다. 실제 프로그램에서는 str.split ("")을 사용하여 두 값을 분리 한 다음 필요한 함수에 전달합니다. IPData는 숫자이고 DataCentre 값은 문자열입니다. 희망이 도움이 – OliverOstach