实现异步/等待node.js和mysql

时间:2019-05-03 14:15:57

标签: mysql node.js asynchronous async-await

我需要截断一个表,然后等待再次开始填充,我必须实现async / await,否则将无法正常工作。

我该怎么做?我尝试在truncateCharfileWorldSaveTable上等待并在该函数上使用async,但我不知道如何使它工作。

async function truncateCharfileWorldSaveTable(){
    let query = 'TRUNCATE charfiles_worldsave'

    await db.get().query(query, function (err, result, fields) {
        if (err) console.error('function truncateCharfileWorldSaveTable: ' + err);
        console.info('Tabla charfiles_worldsave_temporal TRUNCATE');
    });
}

exports.backupCharfiles = async function(req, res) {
    try {

        //Primero borramos todo el contenido de la tabla e iniciamos el proceso
        await truncateCharfileWorldSaveTable()

        console.info('==== INICIANDO COPIA DE CHARFILES POR WORLDSAVE ======')
        let files = fs.readdirSync('./charfiles/');
        files = files.filter(file => file.endsWith('.chr'));
        files.forEach(writeCharfileWorldSaveTable)
        res.status(200).send('Se estan guardando los charfiles en la base de datos');

    } catch(err) {
        console.error('function backupCharfiles: ' + err)
    }
};

1 个答案:

答案 0 :(得分:1)

等待接受回调的函数不会执行任何操作。 await需要保证工作正常,如果要将基于回调的函数转换为Promise样式函数,util.promisfy可能会有所帮助。

但是,还有mysql2软件包,它非常棒。您可以要求使用mysql2/promise而不是mysql,这会将所有基于回调的函数转换为等待的promise样式函数。