我对异步/等待有点陌生。如果不链接,我可以让我的代码正常工作,但我试图使所有内容尽可能模块化。 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/