我的问题是以下帖子的扩展: Handle queries inside loop in node.js
var output;
for (var j = 0; j < someArr.length; j++) {
tVal = someArr[i]; //some manipulation of someArr[i]
(function(val) {
connection.query("select id from someTable where someCol = ?", val, function(err, rows, fields) {
if (err) {
console.log(err);
} else {
output.push(rows[0].someVal); //push query output to this variable
}
});
})(tVal);
}
现在,我想将整个代码放入一个函数中并返回输出。但是,当我尝试它返回一个空集。
答案 0 :(得分:1)
您应该将每个query
变成一个Promise
,然后将Promise.all
返回到Promises数组上。无需进行丑陋的for
循环闭合,只需使用.map
即可:
function getAllQueries(someArr) {
const allPromises = someArr.map(val => new Promise((resolve, reject) => {
connection.query( "select id from someTable where someCol = ?",val, function(err, rows, fields) {
if (err) return reject(err);
else resolve(rows[0].someVal);
});
}));
return Promise.all(allPromises);
}
使用.then
来使用它:
getAllQueries(['foo', 'bar'])
.then((responses) => {
console.log(responses);
});