ノードの非同期性が私と協力し、コールバックやグーグルで何時間も後に問題を起こしています。私はついにあなたたちに目を向ける。'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!
});
をプログラムの別々の関数のビットを作成し、コールバックを作成して、読み込みが完了したときにのみ構文解析を呼び出すようにしましたが、これらのソリューションのどれも動作していないようで、本当に苦労しています。
ありがとうございます!
EDIT:data.txtをファイルの形式は
IPData1 DataCenter1
IPData2 DataCenter2
...
IPDataN DataCenterN
である私は、それぞれの値を取得して、それらを適切に渡す(」「)str.splitを使用しています。 IPDataは数値で、DataCenterは文字列です
あなたはdata.txtをファイルを共有することができますか?私はあなたに答えることができると信じています – Bamieh
@JaromandaX OPのコードをもう一度見てください。これは文字列ではなく配列です。 –
data.txtファイルの形式は 'IPData、DataCentre'です。実際のプログラムでは、str.split( "")を使用して2つの値を分割し、必要な関数に渡します。 IPDataは数値で、DataCentre値は文字列です。これが役に立ったらいいですか? – OliverOstach