我有以下代码检查文件的存在,如果存在,则从文件中解析JSON数据:
fs.access(dbPath, (err) => {
if (err) throw err
else{
console.log('Database found. Processing data.');
dbObj = processDatabaseFile(dbPath);
console.log('checkonstartup: '+dbObj);
return;
}
});
这是processDatabaseFile:
function processDatabaseFile(path){
fs.readFile(path, (err, data) =>{
if (err) throw err;
let jsonData = JSON.parse(data);
return jsonData;
})
}
我的问题是,在调用fs.access函数时,它返回的时间比processDatabaseFile(dbPath)
返回的时间还早。
例如。我想让它使用异步等待,但是我不知道该怎么做。
尝试放入async (err) => { ...
声明,然后使用
dbObj = await processDatabaseFile(dbPath)
,但在if-else和分号以及遗漏括号的地方会出现错误。
感谢您的反馈。
编辑: 关于添加异步等待的错误。我使用的是VSCode,结果证明ESLint和JSHint相互冲突。
答案 0 :(得分:1)
您可以使用以下语法使胖箭头功能异步。
const asyncFunc = async () => {
const result = await someAsyncFunc();
}
答案 1 :(得分:1)
承诺fs.readFile(),在Node中,您可以直接使用promisify
。像
const { promisify } = require('util');
const fs = require('fs');
const readFileAsync = promisify(fs.readFile);
fs.access(dbPath, async (err) => {
if (err) throw err
else {
console.log('Database found. Processing data.');
const dbObj = await processDatabaseFile(dbPath);
console.log('checkonstartup: ' + dbObj);
}
});
async function processDatabaseFile(path) {
const data = await readFileAsync(path);
return JSON.parse(data);
})