javascript - Node.js 中的 fs readFile 代码不知何故崩溃了

标签 javascript node.js json express fs

我有一个简单的 Web 应用程序,我正在使用 Node.js 和 Express。这是我的包结构:

enter image description here

我的questions.json文件内容如下:

[
  {
    "question": "What is your favorite color?",
    "id": 1
  },
  {
    "question": "How old are you?",
    "id": 2
  },
]

operations.json 包含以下内容:

var fs = require('fs');
const questions = 'public/questions.json';

class Operations{
  constructor() {
    fs.readFile(questions, (err, data) => {
      if (err) throw err;
      this.questions = JSON.parse(data);
    });
  }

  findID(id) {
    for (let key in this.questions) {
      if (this.questions[key].id == id) {
        console.log('found it!');
      }
    }
    console.log("can't find it!...");
  }
}

var test = new Operations();
test.findID(1);

这段代码以前可以工作,但现在由于一些奇怪的原因,它被破坏了。 test.findID(1); 的输出总是返回 can't find it... 我不知道为什么。如果我在我的构造函数之外执行 console.log(this.questions),它总是打印 undefined,但如果我要 console.log(JSON. parse(data))fs.readFile 的回调函数中,它将显示文件的内容。

最佳答案

可能 test.findID(1) 在实际 IO 读取发生之前被执行,所以在那一刻,问题是未定义的。

尝试使用 fs.readFileSync而不是 fs.readFile。这实际上应该没问题,因为您仍在对象的构造函数中。

关于javascript - Node.js 中的 fs readFile 代码不知何故崩溃了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58324812/

相关文章:

node.js - 使用 google api 库编译 typescript 时 "error TS2304: Cannot find name ' Long '"

php - JSON_BIGINT_AS_STRING 向后移植

javascript - 在 JSON 请求中发送 csrf token (不是 ajax)

javascript - 符号是如何工作的?

javascript - Node.js 和 Comet

javascript - 代理申请方法不调用

node.js - 如何使用 node.js 将图像文件保存到 sequelize db

javascript - Postman 测试检查部分对象值

javascript - jquery 调整大小丢失 'this' 引用

javascript - DOM 背景颜色传播闪烁继承 Google Chrome 中的初始背景颜色,使用主题切换来重载主体背景颜色