Я пытаюсь сделать следующее: прочитать содержимое каталога, чтобы найти все файлы. xml (я использую glob , но я хотел бы использовать что-то вроде fs.readdir из fs), затем я хочу прочитать каждый файл, используя fs.readFile, а затем хочу преобразовать файл xml в JSON объекты. Для этой цели я использую xml2 json.
Как только у меня появятся объекты json, я бы хотел перебрать каждый из них, чтобы получить из него одно свойство и pu sh это к массиву. В конце концов весь код помещается в функцию, которая записывает содержимое массива (после завершения). Этот код в настоящее время работает нормально, но я попадаю в знаменитый ад обратного вызова.
const fs = require('fs');
const glob = require('glob');
const parser = require('xml2json');
let connectors = []
function getNames(){
glob(__dirname + '/configs/*.xml', {}, (err, files) => {
for (let j=0; j < files.length; j++) {
fs.readFile( files[j], function(err, data) {
try {
let json = parser.toJson(data, {object: true, alternateTextNode:true, sanitize:true})
for (let i=0; i< json.properties.length; i++){
connectors.push(json.properties[i].name)
if (connectors.length === files.length){return console.log(connectors)}
}
}
catch(e){
console.log(e)
}
});
}
})
}
getNames()
Однако я бы хотел перейти к более чистому и элегантному решению (используя обещания). Я читал сообщество и нашел некоторые идеи в некоторых похожих постах здесь или здесь .
Мне бы хотелось узнать ваше мнение о том, как Я должен действовать в подобных ситуациях. Должен ли я go для syn c версии readFile вместо этого? Должен ли я использовать promisifyAll для рефакторинга моего кода и использования обещаний везде? Если да, не могли бы вы пояснить, как должен выглядеть мой код?
Я также узнал, что существует версия fs , основанная на обещаниях , начиная с узла v10.0.0 и далее. Должен ли я go для этого варианта? Если так, то как мне поступить с парсером.в Json ()? Я также видел, что есть еще одна основанная на обещаниях версия под названием xml -to- json -promise .
Я очень ценю ваше понимание этого, поскольку я не очень хорошо знаком с обещаниями, когда задействованы несколько асинхронных операций и циклов, поэтому я в итоге получаю грязные решения для подобных ситуаций.
С уважением, J