У меня возникли проблемы с получением асинхронного характера узла для взаимодействия со мной, а также после часов обратных вызовов и поиска в Google; Наконец я обращусь к вам, ребята.Синхронное выполнение для программы node.js с использованием 'readline'
У меня есть программа, которая должна читаться в строках из файла с помощью модуля readline узла. Этот файл содержит данные, которые передаются некоторым асинхронным функциям, определенным в моей программе узлов. После того как все данные будут успешно прочитаны и обработаны, эти данные должны быть проанализированы в формате JSON, а затем выведены.
Моя проблема заключается в том, что когда я звоню: readLine.on('close', function() { ...... }
, это выполняется до того, как асинхронные функции закончатся, и поэтому я остаюсь без вывода ничего, но программа продолжает работать асинхронные функции.
Я создал простой скелет функций, которые должны объяснить мою ситуацию более ясно:
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!
});
Я пытался добавить функцию обратного вызова к первому/secondAsynFunction, я попытался сделать чтение и синтаксический бит программных отдельных функций и создавать обратные вызовы, так что синтаксический анализ вызывается только при чтении, но ни одно из этих решений, похоже, не работает, и я действительно борюсь - так что любая помощь будет оценена.
Спасибо!
EDIT: data.txt файл формы
IPData1 DataCenter1
IPData2 DataCenter2
...
IPDataN DataCenterN
Я использую str.split (»«), чтобы получить соответствующие значения, а затем передать их соответствующим образом. IPData - это число, а DataCenter - строка
вы можете поделиться файл data.txt? я верю, что смогу ответить на ваш вопрос – Bamieh
@JaromandaX Смотрите еще раз код OP. Это массив, а не строка. –
Файл data.txt имеет следующий вид: 'IPData, DataCentre'. В реальной программе я использую str.split (""), чтобы разделить два значения, а затем передать их в нужную функцию. IPData - это число, а значение DataCentre - строка. Надеюсь, это поможет – OliverOstach