我是 Node.js
技术的新手,在递归概念方面面临一些问题。
我有一个 main.js,其中包含用户名列表和一个肥皂方法调用 Soap.js
包含将从用户名获取电子邮件 ID 的肥皂方法。
------------- Main.js ----------------
'use strict'
var emailService = require('./emailService .js').emailService ;
var emailService1 = new emailService ();
var emailList = [];
var psList = ['1062','10465','10664','10681'];
emailService1.helpdeskEmailService(psList, 'abcabc', 'abcabc', function(err,result) {
console.log('in service -------------------------');
if (err) {
console.log("Error while api call :: " +err);
} else {
console.log("response from soap service - " + result);
}
});
console.log('my email list' +result);
------------- SoapService.js ----------------
'use strict'
var c_instancename = '';
var soap = require('soap');
var l_args;
var c_url = "http://airinmsbmcarmt.lntinfotech.com/arsys/WSDL/public/172.21.103.136/zlandt:FetchEmailID";
class emailService {
constructor(p_instanceName) {
c_instancename = p_instanceName;
}
helpdeskEmailService (ps_number,p_username,p_password,p_callback) {
var l_header = {
'authentication': '',
'locale': '',
'timeZone': '',
'AuthenticationInfo': {
'userName': p_username,
'password': p_password
}
}
soap.createClient(c_url, function(err, client) {
//var soapheader = l_header;
client.addSoapHeader(l_header);
var l_args = {LoginID:ps_number};
client.EmailID(l_args, function(err, result) {
if(err) {
console.log('error page');
} else {
console.log('my resultttttttt in soap...');
p_callback(err,result);
}
});
});
}
}
module.exports.emailService = emailService;
在这种情况下,我收到肥皂服务的响应较晚。
我可以对 webservice
进行同步调用吗,因为我收到了 emailList 的 NULL
值。
我有一个main.js
,其中包含用户名列表和soap方法调用。
Soap.js
包含将从用户名获取电子邮件 ID 的soap 方法。
最佳答案
您可以从服务返回一个 promise ,如果您使用的是 Node 8.0+,您还可以使调用同步。如果不是,至少它可以更轻松地处理异步调用。
helpdeskEmailService (ps_number,p_username,p_password) {
var l_header = {
'authentication': '',
'locale': '',
'timeZone': '',
'AuthenticationInfo': {
'userName': p_username,
'password': p_password
}
}
return new Promise (function (resolve, reject) {
soap.createClient(c_url, function(err, client) {
//var soapheader = l_header;
client.addSoapHeader(l_header);
var l_args = {LoginID:ps_number};
client.EmailID(l_args, function(err, result) {
if(err) {
console.log('error page');
reject(err);
} else {
console.log('my resultttttttt in soap...');
resolve(result);
}
});
});
}
}
// You can then call like this
var promise = emailService1.helpdeskEmailService(psList, 'abcabc', 'abcabc');
promise.then((result) => {
console.log("response from soap service - " + result);
}).catch ( (err) => {
console.log("Error while api call :: " +err);
});
您还可以使用await 使其同步(取决于您使用的Node 版本):
async function waitForresult() {
try
{
const result = await emailService1.helpdeskEmailService(psList, 'abcabc','abcabc');
console.log(result);
} catch (e) {
console.log('Error occurred: ' + e);
}
};
waitForresult();
关于node.js - Node.js递归概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219850/