1

我正在尝试导出一个将 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 正确的结果。

4

2 回答 2

3

由于您的函数是异步的,您可以将其转换为 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>)
于 2018-03-08T18:42:41.927 回答
2

解析器是异步的,因此您需要使用回调或承诺来解决这一问题。

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) => {

});
于 2018-03-08T18:40:44.760 回答