首页 > 解决方案 > 功能:选择 MySQL 并返回 JSON

问题描述

请帮助我,我需要在单独的模块文件中实现一个函数,并且在渲染器必须调用该函数接收查询数据的路径中:

function getSobre() {
    return new Promise((resolve, reject) => {
        db.query(`SELECT * FROM sobre ORDER BY cod DESC LIMIT 1`, (err, results) => {
            if (err) {
                return reject(err);
            } else {
                return resolve(results);
            }
        });
    });
}

const data = {
    title: getSobre().then(data => {
        /*
         * HERE How do I return this "data" to the "title:" ?????????????
         */
    }),
    name: 'Fabio',
    profession: 'Analista'
}
module.exports = data;

标签: javascripthtmlnode.jsexpress

解决方案


db.query是一个 Js 回调。它将等待结果,然后返回任何内容。

所以数据总是空的,因为它在db.query完全解决之前就被返回了很多

您应该将其包装在本机承诺中,然后解决承诺:

function getTabela{
    return new Promise(function(resolve, reject) {
            // The Promise constructor should catch any errors thrown on
            // this tick. Alternately, try/catch and reject(err) on catch.
            let sql = "SELECT * FROM sobre ORDER BY cod DESC LIMIT 1";
            var data = {};

            db.query(sql, (err, results, fields) => {

                if (results.length > 0) {

                      resolve(fields)

                } else {
                    console.log('Erro: ' + err);
                }
            });
        });
}

getTabela().then(function(rows) {
    // now you have your rows, you can see if there are <20 of them
}).catch((err) => setImmediate(() => { throw err; })); 

这样,您应该始终拥有查询中预期的数据。


推荐阅读