Я создаю приложение node.js и хотел бы напечатать несколько сообщений регистрации с номером версии. Сначала номер версии должен быть прочитан из файла свойств Java, поэтому я использую стороннюю библиотеку. Библиотека обеспечивает функцию синтаксического анализа(), но документация указано, что:node.js/socket.io/экспресс-исполнение
path - Boolean
By default parse() reads a String. If you want to read a file, set this option to true. If this option is used, the callback is mandatory. It gets 2 parameters, a possible error and the object with all the properties.
Теперь проблема Node.js является асинхронным, так что нет guarrentee, что номер версии готов перед печатью. Пожалуйста помоги.
var file_log='../log/log.txt';
var file_property='../backend/config.txt';
var log4js = require('log4js');
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file(file_log), 'recon-frontend');
var logger = log4js.getLogger('recon-frontend');
logger.setLevel('info');
var arg = process.argv.slice(2);
if(arg.length) {
arg = parseInt(arg);
}
else {
arg = 2334;
}
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
http.listen(arg, function(){
var properties = require("properties");
var version;
properties.parse(file_property, { path: true }, function (error, obj){
if(error) {
return console.error(error);
}
console.log(obj);
console.log(obj.version);
version = obj.version;
});
logger.info("Recon frontend v"+version+" listening to port "+arg);
});
Одним из возможных вариантов, конечно, чтобы поместить протоколирования предложение внутри функции обратного вызова разбора, но это сбивает с толку, потому что часть информации должна быть только готова, если привязка. Есть ли другое решение, пожалуйста? Благодарю.
Результаты 'properties.parse()' может быть использовано ТОЛЬКО внутри обратного вызова. Вот как работает асинхронное программирование в node.js. И этот обратный вызов будет вызван в будущем. Если вы хотите, чтобы ваш вызов 'logger.info() выполнялся после того, как вы зарегистрировали версию, поместите ее внутри обратного вызова, где доступна версия. – jfriend00