我正在编写一个函数,根据过go 的内容读取JSON文件并返回值.在实际函数内部,我可以向控制台输出我所期望的内容,但是当我将then个输出返回到控制台时,我得到的却是未定义的输出.

我正在使用的JSON文件如下所示:

{
    "ECMadrid": "tbd",
    "ECParis": "tbd2"
}

我用来读取文件的函数如下所示:

    getReferenceNumber(productName){
        fs.readFile('./filepath.json', 'utf-8', (err, jsonString) => {
            if (err) {
                console.log(err)
            } else {
                try {
                    const data = JSON.parse(jsonString);
                    console.log("The reference number before returning is: ", data[productName]);
                    return data[productName];
                } catch (err) {
                    console.log("Error parsing JSON:", err);
                }
            }
        });
    } 

我调用测试文件中的函数,如下所示:

let referenceNumber = await jsonHelper.getReferenceNumber("ECMadrid");
await console.log("I got sent: ", referenceNumber);

我希望这两个控制台日志(log)输出相同的结果,但我的输出是这样的(值得注意的是,它首先输出函数调用之后的控制台日志(log),我认为这很奇怪,值得指出):

I got sent: undefined
The reference number before returning is: tbd

我试图弄清楚为什么getReferenceNumber函数正确地将我想要的内容分配给data[ProductName],但却将未定义的内容返回给我实际调用它的类.提前感谢您的反馈

编辑:回答正确,速度快,谢谢!

推荐答案

getReferenceNumber不是async,也不会回报promise .唯一的return条语句在一个嵌套函数中,该函数返回not条语句,getReferenceNumber条语句返回not条语句.这意味着getReferenceNumber不返回值,这就是为什么您会得到‘未定义’.

你可能想要fsPromises.readFile instead.美元

我相信这是等同的.

async getReferenceNumber(productName: string) {
  try {
    const jsonString = await fs.promises.readFile('./filepath.json', 'utf-8')

    try {
      const data = JSON.parse(jsonString);
      console.log("The reference number before returning is: ", data[productName]);
      return data[productName];
    }
    catch (err) {
      console.log("Error parsing JSON:", err);
    }
  } catch (err) {
    console.log(err);
  }
}

Json相关问答推荐

如何使用PlayWriter循环访问JSON对象

盒子图显示不正确

褐煤面积图中的分选问题

使用 jq 从带有转义反斜杠字符的嵌套 JSON 中提取数据

使用 jq,如何将两个属性构成键的对象数组转换为对象的索引对象?

如何使用Powershell查找所有包含特定键值对的JSON对象并迭代所有对象?

jq - 将父键值提取为子元素旁边的逗号分隔值

如何在 Apps 脚本中循环遍历 JSON 响应

阅读 JSON 正文 Firebase 云函数

MarkLogic REST 资源 API - 仅使用一个 POST 请求修补多个文档

使用 SwiftUI 在 API 调用中解码嵌套 JSON 响应时遇到问题

如何在 Django 的模板语言中获取 json 键和值?

将 JSON 数据导入 Google 表格

错误未判断调用put(K, V)作为原始类型java.util.HashMap的成员

使用 API 搜索维基百科

我应该如何处理 JSON 中的 HATEOAS 链接和引用?

JSON 使用 simplejson 序列化 Django 模型

使用新的 Net Core 3.0 Json 时忽略属性

我如何反序列化以杰克逊为单位的时间戳?

将 Pandas 数据框转换为嵌套 JSON