javascript - 异步函数返回正确的值,但该值在链接时未定义

标签 javascript node.js async-await

我对异步/等待有点陌生。如果不链接,我可以让我的代码正常工作,但我试图使所有内容尽可能模块化。 readFiles() 根据日志返回正确的值,但“files”日志返回未定义。没有任何问题,但 saveRecords() 的最终值是“未定义”。

const fs = require("fs");
const {
  convertCurrencyStr,
  getFiles,
  getMsFromDate,
  parseJSON
} = require("./utils");

const saveResults = data => {
  const writePath = path.join(__dirname, "filteredRecords.json");
  try {
    fs.writeFileSync(writePath, JSON.stringify(data));
  } catch (err) {
    console.log("Could not write data.", err);
  }
};

const filterRecords = data => {
  console.log("filtered", data);
  const deltaDateMs = getMsFromDate("January 1, 2016");
  try {
    const results = data.filter(item => {
      const registeredDateMs = getMsFromDate(item.registered);
      const afterJan16 = registeredDateMs > deltaDateMs;
      const isActive = item.isActive === true;
      const moreThan2000 = convertCurrencyStr(item.balance) > 2000;
      if (afterJan16 && isActive && moreThan2000) {
        return true;
      }
    });
    return results;
  } catch (err) {
    "No data available.", err;
  }
};

const readFiles = async () => {
  const directoryPath = path.join(__dirname, "data");
  try {
    const files = await getFiles(directoryPath);
    files.forEach(file => {
      const filePath = path.join(directoryPath, file);
      const data = fs.readFileSync(filePath);
      const results = parseJSON(data);
      return results;
    });
  } catch (err) {
    console.log("Could not read files.", err);
  }
};

(async () => {
  const files = await readFiles();
  const records = await filterRecords(files);
  saveResults(records);
})();

最佳答案

你的readFiles需要在forEach之后有一个返回,里面的返回是针对数组元素的,你需要另一个返回结果。 我不确定你的过滤器是否有效,如果没有必要,你应该只使用

return (afterJan16 && isActive && moreThan2000)

关于javascript - 异步函数返回正确的值,但该值在链接时未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60480684/

相关文章:

javascript - 为什么 JS 中的简单阶乘算法比 Python 或 R 中的快得多?

c# - 什么是 "naturally asynchronous"或 "pure asynchronous"?

javascript - AMD 模块整形 : How to load only one JS function?

node.js - 用于本地连接的 Azure 表存储的连接字符串

javascript - 如何在 Node.JS 中获取 JSON

javascript - 在 sequelize.js 中使用构建方法时是否需要验证、清理或转义数据

node.js - Node 防止意外调用异步函数而不等待

c# - 分组并行执行任务

javascript - 使用新的 Javascript SDK 调整 Facebook 应用程序的 iFrame 的大小

javascript - 如何将选项选择添加到 PayPal JavaScript 按钮