Javascript 函数:选择MySQL并返回JSON
请帮助我,我需要在一个单独的模块文件中实现一个函数,并在渲染必须调用此函数以接收查询数据的路径中实现:Javascript 函数:选择MySQL并返回JSON,javascript,html,node.js,express,Javascript,Html,Node.js,Express,请帮助我,我需要在一个单独的模块文件中实现一个函数,并在渲染必须调用此函数以接收查询数据的路径中实现: function getSobre() { return new Promise((resolve, reject) => { db.query(`SELECT * FROM sobre ORDER BY cod DESC LIMIT 1`, (err, results) => { if (err) {
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;
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; }));
函数getTabela{
返回新承诺(功能(解决、拒绝){
//Promise构造函数应该捕获在上抛出的任何错误
//此勾选。或者,尝试/捕获和拒绝(错误)捕获。
让sql=“按cod描述限制1从sobre订单中选择*”;
变量数据={};
db.query(sql,(错误、结果、字段)=>{
如果(results.length>0){
解析(字段)
}否则{
console.log('Erro:'+err);
}
});
});
}
getTabela().then(函数(行){
//现在您有了行,您可以查看是否有setImmediate(()=>{throw err;}));
通过这种方式,您应该始终拥有查询中预期的数据。现在您根据答案修改了整个问题。。请保留原始问题并添加疑问作为评论的一部分。几个月后出现此问题的人会因为看到答案而感到困惑,这在您编辑后没有多大意义。Remember:它应该对社区有用,而不仅仅是您:)解决方案: