【问题标题】:Function: Select MySQL and Return JSON功能:选择 MySQL 并返回 JSON
【发布时间】:2020-05-09 20:30:18
【问题描述】:

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

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;

【问题讨论】:

标签: javascript html node.js express


【解决方案1】:

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

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

【讨论】:

  • 现在您根据答案修改了整个内容。请保留原始问题并添加疑问作为评论的一部分。几个月后提出这个问题的人会因为看到答案而感到困惑,这在您编辑后没有多大意义。请记住,它应该对社区有用,而不仅仅是你:)
猜你喜欢
  • 2021-03-28
  • 2012-03-25
  • 2017-11-13
  • 1970-01-01
  • 2016-05-21
  • 2018-07-31
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
相关资源
最近更新 更多