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)