【问题标题】:Implement async/await node.js and mysql实现 async/await node.js 和 mysql
【发布时间】:2019-09-22 02:36:37
【问题描述】:

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

我该怎么做?我尝试在 truncateCharfileWorldSaveTable 上使用 await 并在该功能上使用 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)
    }
};

【问题讨论】:

  • 不要将回调 API 与 Promise 一起使用。不知道您为 mysql 使用的是什么库,但它有基于承诺的库。

标签: mysql node.js asynchronous async-await


【解决方案1】:

等待一个接受回调的函数什么都不做。 await 需要一个 Promise 才能工作,如果你想将基于回调的函数转换为 Promise 风格的函数 util.promisfy 可能会有所帮助。

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

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 2018-07-15
    • 2017-10-15
    • 2018-11-27
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多