如何使箭头功能异步?

时间:2019-04-13 13:22:14

标签: javascript node.js async-await

我有以下代码检查文件的存在,如果存在,则从文件中解析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相互冲突。

2 个答案:

答案 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);
})