需要等待soapClient结果

时间:2019-09-20 00:28:56

标签: node.js node-soap

嗨,这是我对stackoverflow的第一个问题。 我写了一个函数,期望在nodejs中的soapClient调用会产生结果,但是它不等待调用返回,返回值为空。

我尝试对代码进行多次修改,但无法获得预期的结果。 我希望得到一些输出,但是它是空的。

注意URL是虚构的!

谢谢有人可以帮助我!

result <- data.frame() # empty frame
for (i in 1:135) {
    if (airport$Scheduled[i] < airport$Performed[i])
        result <- rbind(result, airport[i,])
}

1 个答案:

答案 0 :(得分:0)

我建议您使用soap软件包文档中的this example中的承诺。

您拥有的代码不是异步的,因此它不会等待操作完成。

它应该看起来像这样

import * as soap from "soap";

function getTokens(service: string): Promise<string> {

    return new Promise<string>((resolve, reject) => {

        function Call(err: any, client: soap.Client) {

            client.loginCms({ in0: service }, function (
                err: any,
                result: any,
                _rawResponse: string, 
                _soapHeader: any,
                _rawRequest: string
            ) {
                if (err) {
                    console.error(err);
                    reject(err)
                 } else {
                    Auth = result.loginCmsReturn;
                    resolve(Auth);
                 }
             });
        }

        soap.createClient("wsdl_url", {
            disableCache: true,
            envelopeKey: "env"
        }, Call, "endpoint_url");

    });
};

getTokens("service").then((Auth) => {
    console.log(Auth);
});

还请注意:

  • 我遵循您的变量名,标识符开头应使用大写字母,用于构造函数或类名。
  • 还要检查您的TypeScript / JavaScript / EcmaScript版本,以查看箭头功能(如我的示例)是否兼容。如果没有,则可以转换为普通的匿名函数。