Javascript如何将xml2js放入函数中

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:

我正在尝试导出一个函数,该函数将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;
    });
  });
}

我遇到的问题是,函数返回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。