我对异步/等待有点陌生。如果不进行链接,我可以使代码正常工作,但是我试图使所有内容尽可能模块化。 readFiles()
根据日志返回正确的值,但是“文件”日志返回未定义。没有任何中断,但是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)
将您的退货放入forEach之外
try {
const files = await getFiles(directoryPath);
let results;
files.forEach(file => {
const filePath = path.join(directoryPath, file);
const data = fs.readFileSync(filePath);
results = parseJSON(data);
});
return results;
} catch (err) {
console.log("Could not read files.", err);
}