Я нахожусь в процессе создания обработчика данных, и как часть этого мне нужно загрузить файл, чтобы затем проанализировать и работать с ним как с частью обработчика.
Я завернул запрос на файлв обещании и асинхронном вызове метода из других методов
Я включил обработчик из отдельного файла теста следующим образом
let DataHandler = require('./handler');
const handler = new DataHandler();
console.log(handler.getSupervisors());
Метод getSupervisors
выглядит следующим образом
async getSupervisors() {
const parsed = await this.loadFile();
let supervisorList = [];
parsed.controllers.map(controller => {
if (controller.rating === 11 || controller.rating === 12){
supervisorList.push(controller);
}
});
return supervisorList;
}
Это вызывает метод loadFile
, который просто вызывает метод update
и перед возвратом необходимого файла json. Следующие 2 метода - это update
и downloadFile
, которые, как я думаю, являются моими двумя проблемами, они заключаются в следующем:
async update() {
let body = await this.downloadFile();
const parsedJSON = JSON.parse(body);
parsedJSON.updated_date = new Date();
const json = JSON.stringify(parsedJSON);
fs.writeFile('vatsimData.json', json, function(err, result) {
if(err) console.log(err);
});
}
downloadFile() {
return new Promise((resolve, reject) => {
const urlList = [
'http://us.data.vatsim.net/vatsim-data.json',
'http://eu.data.vatsim.net/vatsim-data.json',
'http://apac.data.vatsim.net/vatsim-data.json'
];
const url = urlList[Math.floor(Math.random()*urlList.length)];
request(url, (error, response, body) => {
if (error) reject(error);
if (response.statusCode !== 200) {
reject('Invalid status code <' + response.statusCode + '>');
}
resolve(body);
});
});
}
Вывод метода getSupervisors
должен представлять собой массив всех супервизоров'внутри файла json вместо этого он возвращает Promise { <pending> }
и эту ошибку
(node:3160) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at DataHandler.loadFile (D:\Projects\VATSIM-Data-Handler\handler.js:57:15)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:3160) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:3160) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Я попытался поместить весь метод update
в .then
обратный вызов после вызова downloadFile
, но он сделалне работает
Мой метод loadFile выглядит следующим образом
async loadFile(){
await this.update();
return(JSON.parse(fs.readFileSync('vatsimData.json', {encoding:'utf-8'})));
}