如何从SOAP函数返回值到meteor方法?

问题描述 投票:0回答:4

我里面有一个 Meteor 方法,正在调用soap 函数。

Meteor 在收到来自肥皂客户端的响应之前正在执行所有语句。

所以我得到的结果是未定义的。

我想在执行方法中的其他语句之前承诺肥皂执行。

createSoapConnection(){
    var Soap = require('soap');
    var url = 'https://xxxxxx/index.php/api/v2_soap/?wsdl';
    var args = {username: 'xxxxxx', apiKey: 'xxxxxx'};
        let client = Soap.createClient(url, function(err, client){
        let result = client.login(args, function(err, result) {
        let sessionId = result.loginReturn.$value;
         console.log(sessionId);
            return {
                conn: client,
                sessionId: sessionId
                };
            });
        }); 
} 

我正在通过这个流星方法调用这个方法。

addsoapmessage(){
        let a = Meteor.call("createSoapConnection");
        console.log(a);
}

在控制台中,结果是未定义。之后会打印会话 ID。我该如何解决这个问题?

node.js magento meteor soap magento-soap-api
4个回答
0
投票

Meteor 方法不返回任何内容。您可以请求一个回调,该回调将在完成后触发,但回调不会传回返回值,如果找到返回值,只会返回一个错误。

处理这个问题的最好方法是获取将结果保存在集合中的方法,并依靠订阅让客户端反应性地看到它。

或者,您可以将返回的数据存储在服务器变量中,然后只能由服务器代码访问该变量(但这可能有效,因为其他服务器方法可能想要访问这些值。


0
投票

在流星调用中实现回调函数

 let a = Meteor.call("createSoapConnection", function (error, result) {
                // display the error to the user and abort
                if (error)
                    console.error(error.reason);

                else {
                    console.log(result);
                }
            });

0
投票
meteor add zardak:soap

将此软件包安装在应用程序文件夹的根目录中。然后尝试使用以下代码。

var url = 'http://example.com/wsdl?wsdl';
var args = {name: 'value'};

try {
  var client = Soap.createClient(url);
  var result = client.MyFunction(args);

 return result; // or send this result to the function where ever you want.
}
catch (err) {
  if(err.error === 'soap-creation') {
    console.log('SOAP Client creation failed');
  }
  else if (err.error === 'soap-method') {
    console.log('SOAP Method call failed');
  }

}

您可以使用这些函数执行任何soap api 调用。欲了解更多详情,请访问:https://atmospherejs.com/zardak/soap


-1
投票
fuction(url,args)
{
   soap = Npm.require('soap');
   var createClient=Meteor.wrapAsync(soap.createClient,soap);
   var client=createClient(url);
   var finalFunc=Meteor.wrapAsync(client.youfunction,soap);
   var result=finalFunc(args);
   return result;
}
© www.soinside.com 2019 - 2024. All rights reserved.