下面的代码检查文件是否存在,如果存在,则解析其中的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和分号周围出现错误,并且缺少括号。
欢迎反馈。
编辑:关于添加async-await的错误。我使用的是VSCode,结果发现ESLint和JSHint相互冲突。
您可以使用下面的语法使fat箭头函数异步。
const asyncFunc = async () => {
const result = await someAsyncFunc();
}
Promisify fs.readfile(),在节点中,您可以得到开箱即用的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);
})