var fs = require('fs');
var fd = fs.openSync('./text', 'r');
var decoder = new (require('string_decoder').StringDecoder)();
var buf = new Buffer(10);
var list = [], str, bytesReaded;
while (bytesReaded = fs.readSync(fd, buf, 0, 10, null)) {
str = (list.pop() || '') + decoder.write(buf.slice(0, bytesReaded));
list = list.concat(str.split("\n"));
}
console.log(list);
var fs = require('fs');
var list = [];
fs.createReadStream('./text', {encoding: 'utf8'})
.on('readable', function() {
var str, chunk;
while (chunk = this.read(10)) {
str = ((list.pop() ||'') + chunk);
list = list.concat(str.split('\n'));
}
list[list.length-1] += (this.read() || '');
})
.on('end',function() {
console.log(list);
});
Выше очень правильно заметили, что нужно разбивать методы на логические части поменьше, а не писать простыней, но еще есть проблема в том, что нужно сделать несколько запросов в БД или другим внешним источникам, к файлам, другим серверам, и потом на основе всех фрагментов данных, полученных асинхронно, исполнить бизнес-логику и сформировать ответ. Асинк прекрасно с этим справляется, как в примере ниже.
var dataRequests = [];
// массив запросов к разным данным (БД, файлы, сетевые вызовы)
var dataResults = {};
// я предпочитаю не использовать массив results, который дает async
// а вместо этого делать именованные фрагменты данных
// и писать их в свой хеш
// добавляем один запрос к данным
dataRequests.push(function(callback) {
db.queryRow(
'SELECT * FROM TableName1 where Field1=?', [someValue1],
function(err, res) {
dataResults.firstPiceName = res;
callback(err, null);
}
);
});
// добавляем второй запрос к данным
dataRequests.push(function(callback) {
db.queryValue(
'SELECT count(*) FROM TableName2 where Field2=?',
[someValue2],
function(err, res) {
dataResults.secondPiceName = res;
callback(err, null);
}
);
});
// вызываем массив запросов асинхронно
async.series(dataRequests, function(err, results) {
// тут делаем бизнес-логику над dataResults в котором у нас есть
// все фрагменты данных .firstPiceName и .secondPiceName
// и формируем общий результат
});
А еще рекомендую ставить тег "node.js" на вопросы по ноде.