提问者:小点点

如何使箭头函数异步?[副本]


下面的代码检查文件是否存在,如果存在,则解析其中的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相互冲突。


共2个答案

匿名用户

您可以使用下面的语法使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);
})

相关问题