gpt4 book ai didi

javascript - 修改 NodeJS 中嵌套查询的结果

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:10 27 4
gpt4 key购买 nike

对 NodeJS 很幼稚,并试图找到一种方法将第二个表的结果添加到 Node js 中第一个表的结果集中。

如何在第二个查询中访问第一个查询的结果?

以下是我的带有注释的代码片段

function getTasks(callback) {
//first query gives result set
connection.query('SELECT * FROM ' + properties.get('database.Table') +' order by timestamp desc', function(err, rows){
if(!err){
//for each result from result set, match on Id and get values from table_2
for (var i = rows.length - 1; i >= 0; i--) {
connection.query('SELECT * FROM table_2 where taskId = "' + rows[i].taskId + '"', function(err, sets){
if(!err){
//if we have any results from table_2 then create an object
if(sets.length > 0){
var setStatus = [];
for (var i = sets.length - 1; i >= 0; i--) {
setStatus[i] = {Status : sets[i].type+'-'+sets[i].status};
}
//add the setStaus object to results from first table (to rows)
//ISSUE: accessing rows[i] here is alwyas undefined??
}
}
});
}
//need to send the rows with updates from nested block
callback(rows);
}
});

更新:异步/等待解决方案有效,并将内部迭代器的 i 更改为 j!

最佳答案

您可以使用 async/await 来处理

const execute = (query) => {
return new Promise((resove, reject) => {
connection.query(query,
function (err, rows) {
if (err) reject(err);
resove(rows);
});
});
}

const getTasks = async () => {
const query = 'SELECT * FROM ' + properties.get('database.Table') + ' order by timestamp desc';
const rows = await execute(query);
for (var i = rows.length - 1; i >= 0; i--) {
const innerQuery = 'SELECT * FROM table_2 where taskId = "' + rows[i].taskId + '"';
const sets = await execute(innerQuery);
//Do some stuff
if (sets.length > 0) {
var setStatus = [];
for (var i = sets.length - 1; i >= 0; i--) {
setStatus[i] = {
Status: sets[i].type + '-' + sets[i].status
};
}
}
}
return rows;
};

Yau 可以在 wait 内部调用或在下面给出

getTasks().then((rows) => {
console.log(rows);
}).catch((err) => {
console.log(err);
})

关于javascript - 修改 NodeJS 中嵌套查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48890588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com