node.js - Node.js递归概念

标签 node.js recursion asynccallback

我是 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/

相关文章:

node.js - 动态解析 Jade 内容

node.js - Mongoose 查询帮助 : Paginate, 排序、嵌套数组限制

python - "Hamiltonian"路径使用 Python

recursion - 使用递归在 Lisp 中生成斐波那契数列?

c# - 如何触发异步任务,但在返回 ActionResult 之前等待所有回调?

javascript - 在 Node.js + MongoDB 中使用 REST API 插入和查询 JSON 数据

node.js - 如何从 Node js 回调返回

regex - 检查正则表达式子模式是否不包含先前的子模式?

node.js - 无法读取 node_redis hgetall 函数中未定义的属性 'length'

javascript:函数在分配给变量时返回未定义的值