gpt4 book ai didi

javascript - Nodejs 从嵌套函数返回结果

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:41 27 4
gpt4 key购买 nike

我很难理解如何在 JS 中操作堆栈希望这个练习能帮助我..

所以我尝试编写一个函数来进行soap xml 调用并解析数据。然后在调用时返回解析后的数据。

当我调用该函数时,我可以将其结果发送到 console.log,但我无法让它返回结果,因此我可以将其存储在变量等中。它返回未定义。

代码如下:

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

最佳答案

您应该使用Promises对 future 事件使用react并处理 JavaScript 中的异步代码执行:

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

};
return new Promise((resolve, reject) => { // return a promise so that you can handle it when you invoke `query`

request(options, function (error, response) {
if (error) {
reject(new Error(error)); // reject instead of throwing, handle with `catch`
return;
}
text = response.body;
parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");
xmlResult = xmlDoc.getElementsByTagName(`${elementToParse}`)[0].childNodes[0].nodeValue;
resolve(xmlResult); // resolve instead of returning, handle with `then`
});
})
}

query('Ticket', 'TicketNumber', 'BeginsWith', 'T2019', 'id')
.then(xmlResult => console.log(xmlResult))
.catch(err => /* do something with that `new Error(error)` you rejected in `query`*/);

关于javascript - Nodejs 从嵌套函数返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59901074/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com