Promise { <pending> } - 用于最后一个异步函数

时间:2021-03-15 10:59:39

标签: javascript promise

我有两个主要功能。第一个从 API 获取 SOAP 数据。第二个将其解析为 json,然后将其格式化为我需要存储的对象。我一直在记录并查看返回值,到目前为止,一切都很好。但是,我从我的测试文件中调用 exports.createReturnLabel ,我能看到的只有 Promise { <pending> } 。我在最后一个函数中返回一个值。这段代码对你来说看起来很奇怪吗?我该如何清理它?

const soapRequest = require('easy-soap-request');
const xmlParser = require('xml2json')

exports.createReturnLabel = async () => {
    const xml = hidden

    const url = 'https://ws.paketomat.at/service-1.0.4.php';

    const sampleHeaders = {
        'Content-Type': 'text/xml;charset=UTF-8',
    };

    const auth = async () => {
        const {
            response
        } = await soapRequest({
            url: url,
            headers: sampleHeaders,
            xml: xml,
            timeout: 2000
        });
        const {
            body,
            statusCode
        } = response;

        return body
    }

    const fetchLabel = async () => {
        const soapData = await auth();
        try {
            const json = xmlParser.toJson(soapData)
            const labelData = JSON.parse(json)["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:getLabelResponse"]
            return {
                courier: 'dpd',
                tracking_number: labelData["return"]["paknr"],
                barCode: labelData["return"]["barcodecontent"],
                printLabel: labelData["return"]["label"],
                _ref: null
            }
        } catch (e) {
            return (e)
        }
    }

    return fetchLabel()
}

从我的测试文件 return console.log(file.createReturnLabel())

调用

1 个答案:

答案 0 :(得分:0)

您的代码中有一个 async 函数调用。

应该是:return await fetchLabel(),这样它就可以等待完成后再继续它的快乐之路。