我是Node.js
技术的新手,面临着递归概念方面的一些问题。
我有一个包含用户名列表的main.js和一个soap方法调用Soap.js
包含将从用户名获取电子邮件id的soap方法。
------------- 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;
在这种情况下,我从soap服务得到延迟响应。
我是否可以进行webservice
的同步调用,因为我正在获取emailList的NULL
值。
我有一个包含用户名列表和soap方法调用的main.js
。
Soap.js
包含soap方法,该方法将从用户名获取电子邮件id。
发布于 2018-01-12 09:18:06
您可以从您的服务返回一个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();
https://stackoverflow.com/questions/48219850
复制相似问题