【发布时间】:2020-05-11 01:18:05
【问题描述】:
我很难理解如何在 JS 中操作堆栈 希望这个练习对我有所帮助..
所以我尝试编写一个函数来调用soap xml 并解析数据。然后在调用时返回解析后的数据。
当我调用该函数时,我可以将它发送到控制台。记录结果,但我无法让它返回结果,因此我可以将它存储在变量等中。它返回未定义。
代码如下:
var request = require('request');
var DOMParser = require('xmldom').DOMParser;
function query (entity,field,op,expression,elementToParse){
xml =
`<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<AutotaskIntegrations xmlns="http://autotask.net/ATWS/v1_6/">
<IntegrationCode>H2FATPVKPDN25IXIBSMN5K66XAA</IntegrationCode>
</AutotaskIntegrations>
</soap:Header>
<soap:Body>
<query xmlns="http://autotask.net/ATWS/v1_6/">
<sXML><![CDATA[<queryxml><entity>${entity}</entity><query><field>${field}<expression
op="${op}">${expression}</expression></field></query></queryxml>]]></sXML>
</query>
</soap:Body>
</soap:Envelope>`;
options = {
'method': 'POST',
'url': 'https://webservices15.autotask.net/ATServices/1.6/atws.asmx',
'headers': {
'Content-Type': 'text/xml',
'Authorization':'Auth Goes Here'
},
body: xml
};
request(options, function (error, response) {
if (error) throw new Error(error);
text = response.body;
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
xmlResult = xmlDoc.getElementsByTagName(`${elementToParse}`)[0].childNodes[0].nodeValue;
**console.log(xmlResult)**
});
}
query('Ticket','TicketNumber','BeginsWith','T2019','id')
// returns result if i log the data in REQUEST
//returns undefined otherwise
【问题讨论】:
-
您无法返回结果。因为 node.js 网络是异步且非阻塞的,所以您的函数将在您获得数据之前返回。因此,您不能直接从函数中返回它。相反,当数据最终到达时,您必须使用回调或承诺来回传数据。查看您的问题已被标记为重复,以获得完整的解释和示例。
标签: javascript node.js xml async-await request