0

我正在使用 Node 打字稿中的肥皂。

我想在强肥皂包中对服务器执行肥皂请求后返回一个布尔值。

代码如下所示:

public isSupplierBalance(debtorAccount: number): boolean {
        let economicToken = this.token;

    soap.createClient(this.WSDL, {}, function (err, client) {
        let method = client['ConnectWithToken'];
        let args = {
            token: economicToken,
            appToken: economicAPI.EconomicN1Key
        };
        method(args, function (err, result, envelope, soapHeader) {
            if (err) {
                console.log(err);
            }
            let session = cookieParser(client.lastResponseHeaders);
            let args = {
                creditorHandle: {
                    Number: debtorAccount
                }
            };
            client.addHttpHeader('Cookie', session);
            method = client['Creditor_GetOpenEntries'];
            method(args, function (err, result, envelope, soapHeader) {
                if (err) {
                    console.log(err);
                }
                console.log(result.toString());
                return (typeof result.Creditor_GetOpenEntriesResult === 'undefined');
            });
        });
    });
}

基本上,如果 result.Creditor_GetOpenEntriesResult 包含任何非值,我想返回。我在 strong-soap 的文档中看到可以使用异步方法,我想这应该是我的方法,但对该解决方案的任何测试都刚刚失败。 https://www.npmjs.com/package/strong-soap

4

1 回答 1

1

希望这可以帮助。我能够用新的Promise包装它

async function callSOAP(options: {}, methodname: any, methodparams: any) {
let finalresult: any;

    return new Promise((resolve, reject) => {
        soap.createClient(url, options, async function (err: any, client: any) {
            const { result, envelope, soapHeader } = await client[methodname](methodparams);
            finalresult = { result, envelope, soapHeader }
            // return { result, envelope, soapHeader };
            if (err) {
                reject(err);
            }
            else { resolve(finalresult) };
        });
    }

调用代码看起来像这样

 result = await callSOAP(options, methodname, methodparams).then((r1) => r1);

于 2021-01-11T11:48:24.720 回答