Javascript, как положить xml2js в функцию
Я пытаюсь экспортировать функцию, которая будет анализировать XML для объекта JSON.
export const parse = (body) => {
const parser = new xml2js.Parser({explicitArray: false, trim: true});
parser.parseString(body, (err, result) => {
if (err) return err;
parser.parseString(result['soapenv:Envelope']['soapenv:Body']['ns1:searchResponse'].searchReturn._, (err, result) => {
if (err) return err;
console.log(result);
return result;
});
});
}
Проблема, с которой я столкнулся, заключается в том, что функция возвращает неопределенное значение, однако ей удается в console.log получить правильный результат.
2 ответа
Поскольку ваша функция асинхронна, вы можете преобразовать ее в обещание.
export const parse = (body) => {
return new Promise((resolve, reject) => {
const parser = new xml2js.Parser({explicitArray: false, trim: true});
parser.parseString(body, (err, result) => {
if (err) return reject(err);
parser.parseString(result['soapenv:Envelope']['soapenv:Body']['ns1:searchResponse'].searchReturn._, (err, result) => {
if (err) return reject(err);
resolve(result);
});
});
}
})
Вы можете использовать это таким образом..
const result = await parse(<somebody>)
Парсер асинхронный, поэтому вам необходимо учитывать это с помощью обратного вызова или обещания.
const parser = new xml2js.Parser({explicitArray: false, trim: true});
export const parse = (body) => new Promise((resolve, reject) => {
parser.parseString(body, (err, result) => {
if(err) return reject(err);
return resolve(result);
});
});
Использование.
module.parse(xml).then((parsedResult) => {
});