Saltar al contenido

¿Cómo obtener resultados xml2js del analizador en ES6?

Solución:

await esperará un Promise valor para resolver, de lo contrario, simplemente envolverá el valor que se le da en una promesa y resolverá la promesa de inmediato. En tu ejemplo,

await glob('./filedrop/ALLREQUESTS-*.xml', (err, files) => {

la llamada a glob no devuelve un Promise, entonces el await es esencialmente inútil. Por lo tanto, debe crear la promesa usted mismo.

exports.checkFileDrop = async () => {
  console.log('Checking for xml in filedrop...');

  const files = await new Promise((resolve, reject) => glob('./filedrop/ALLREQUESTS-*.xml', (err, files) => {
    if (err) reject(err);
    else resolve(files);
  });

  const parser = new xml2js.Parser();

  const data = await new Promise((resolve, reject) => fs.readFile('./filedrop/ALLREQUESTS-20170707.xml', 'utf16le', function (err, data) {
    if (err) reject(err);
    else resolve(data);
  });

  const result = await new Promise((resolve, reject) => parser.parseString(data, (err, result) => {
    if (err) reject(err);
    else resolve(result);
  });

  console.log('data found');

  const requests = JSON.stringify(result.Records.Record);

  console.log(requests);
}

Tenga en cuenta que ahora esta función rechazará la promesa que devuelve en lugar de forzar el registro del error.

También puede condensar esto con un ayudante. El nodo 8, por ejemplo, incluye util.promisify para hacer que un código como este sea más fácil de escribir, por ejemplo

const util = require('util');

exports.checkFileDrop = async () => {
  console.log('Checking for xml in filedrop...');

  const files = await util.promisify(glob)('./filedrop/ALLREQUESTS-*.xml');
  const parser = new xml2js.Parser();

  const data = await util.promisify(fs.readFile)('./filedrop/ALLREQUESTS-20170707.xml', 'utf16le');

  const result = await util.promisify(parser.parseString.bind(parser))(data);

  console.log('data found');

  const requests = JSON.stringify(result.Records.Record);

  console.log(requests);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *