为什么返回的值在Typescript中为'undefined'?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么返回的值在Typescript中为'undefined'?相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个函数,该函数将在变量中返回并存储某些数据。我正在尝试的代码如下。下面的代码应该获取xml文件,将其解析为json,然后根据jp查询返回一组值。

export function getEntities(testFileContent) {
    parseString(testFileContent, async function (err, result) {
        const entities = await jp.query(result, '$..entity_name[0]');
        return entities;
    });
}

实体变量已正确填充到函数内部,但是当尝试获取这样的数据时,它的名称为'undefined':

const data = await getEntities(testFileContent);
console.log(data) //will come as undefined

关于如何处理此问题的任何想法?

答案

这是因为您不返回任何东西,所以它是未定义的。这不是打字稿的问题。

您只是没有意识到要在匿名函数中返回它,因此它被丢弃了。

我将在几秒钟内为您提供一个闪电战的例子。

UPDATE

StackBlitz:https://stackblitz.com/edit/typescript-kyuhca

我希望这对您有用:)

另一答案

因此,最后我想出了解决方法。这就是我处理xml到json转换的方式,可以从函数提取cllback,并且可以在其他地方重用它。可能是很基本的事情,但也许有人面临相同的障碍:

export function xmlToJSON(str, options) {
    return new Promise((resolve, reject) => {
        parseString(str, options, (err, jsonObj) => {
            if (err) {
                return reject(err);
            }
            resolve(jsonObj);
        });
    });
}

之后,我简单地调用它并将数据存储在变量中:

const json = await xmlToJSON(string, null);
另一答案

您的函数不返回任何东西

尝试

export async function getEntities(testFileContent) {
    return await parseString(testFileContent, async function (err, result) {
        const entities = await jp.query(result, '$..entity_name[0]');
        return entities;
    });
}

以上是关于为什么返回的值在Typescript中为'undefined'?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用指定的值在表格中为 td 着色?

数据成员的值在 Typescript 中没有改变

如何从 nsmutabledictionary 中删除键当该键的值在 ios 中为空或 null 时?

如果具有相同的 id 和相同的值或值在 PHP 中为空,则合并行

如果行中的初始值在 SQL 中为 < 或 > 0,如何返回单独的列总和

js中哪些值在if判断是false