我使用以下代码来调用数据库查询(Node.js)。在我将数据输出返回到调用函数的意义上,该代码似乎有效。问题是我似乎无法操纵这些数据...我不知道问题出在什么地方。
数据库脚本('queries.js'):
function getFinals() {
return new Promise(function(resolve, reject) {
pool.query('SELECT * FROM users', (error, results) => {
if (error) {
reject(new Error('Ooops, something broke!'));
} else {
resolve(results.rows);
}
}) //pool.query
});
}
我的“主要”脚本:
const db = require('./routes/queries');
app.get('/lookup', function (req, res) {
db.getFinals()
.then(function(value) {
console.log('Async success!', value);
})
.catch(function(err) {
console.log('Caught an error!', err);
});
});
我从数据库调用中获得的数据从console.log中的“值”显示出来。但是,我不能对这个变量数据做任何事情。我希望运行一个循环,例如:
for (_count = 0; _count < (value.length - 1); _count++) {
console.log("count...!" + _count);
}
但是什么也没发生,循环不会执行。看来“值”是不确定的...为什么...?我如何使用从(看似)功能数据库调用返回的数据...?这是非常令人沮丧的...任何建议表示赞赏。
包含循环的完整调用函数:
app.get('/lookup', function (req, res) {
db.getFinals()
.then(function(value) {
console.log('Async success!', value);
for (_count = 0; _count < (value.length - 1); _count++) {
console.log("count...!" + _count);
}
})
.catch(function(err) {
console.log('Caught an error!', err);
});
});
console.log中的输出如下:
Async success! [ { name: 'administration',
cred: 'peace',
status: 'active',
login: '2090',
logout: 'na',
service: 'both',
lucky: 'na',
picture: null,
picturex: null,
vod: null,
vodx: null,
legacy: 'na' } ]
等于它应显示的内容。另一个奇怪的是,它打印两次...尽管数据库表中只有1条记录...不确定这是一个问题还是应答呼叫的正常行为...?
答案 0 :(得分:0)
在上面获取数据时,问题在于循环:数组基于零,而您正在做_count < (result.length - 1)
,这意味着您不会循环访问最后一条记录。在您的情况下,只有一行,因此它不会循环。
正确的语法为:i < result.length
查看演示:
const result = [ { name: 'administration',
cred: 'peace',
status: 'active',
login: '2090',
logout: 'na',
service: 'both',
lucky: 'na',
picture: null,
picturex: null,
vod: null,
vodx: null,
legacy: 'na' } ];
for (_count = 0; _count < (result.length - 1); _count++) {
console.log(`existing loop: name is ${result[i].name}`);
}
for (let i = 0; i < result.length; i++) {
console.log(`correct loop: name is ${result[i].name}`);
}