节点js递归概念

时间:2018-01-12 05:05:16

标签: node.js recursion asynccallback

我是Node.js技术的新手,面临递归概念中的一些问题。

我有一个main.js,其中包含用户名列表和一个soap方法调用Soap.js包含soap方法,该方法将从用户名中获取电子邮件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包含soap方法,该方法将从用户名中获取电子邮件ID。

1 个答案:

答案 0 :(得分:0)

您可以从服务中返回承诺,如果您使用的是Node 8.0+,也可以使呼叫同步。如果不是这样,它可以更容易地处理异步调用。

/login

您也可以使用await来使其同步(取决于您正在使用的Node的版本):

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);
});