Javascript如何将xml2js放入函数中
我正在尝试导出一个函数,该函数将xml解析为json对象Javascript如何将xml2js放入函数中,javascript,node.js,xml2js,Javascript,Node.js,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:
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;
});
});
}
我遇到的问题是,函数返回undefined,但是它设法将正确的结果记录到console.log中 解析器是异步的,因此您需要使用回调或承诺来说明这一点
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) => {
});
解析器是异步的,因此您需要使用回调或承诺来说明这一点
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) => {
});
因为您的函数是异步的,所以可以将其转换为promise
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>)
因为您的函数是异步的,所以可以将其转换为promise
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>)
我相信你指的是结果。不,你不必返回它,resolve将返回值,我使用了return和reject,这样函数就不会执行任何进一步的操作了,我相信你的意思是返回resolveresult。但除此之外,它还可以工作。不,你不必返回它,resolve将返回值,我使用了return和reject,这样函数就不会执行任何进一步的操作。或者,正如下面提到的,对于用法,我们可以使用const result=wait parse。或者,正如下面提到的用法,我们可以使用const result=wait parse。