我想查询sql以获取名称并将其存储在数组中。 下次如果它出现在数组中,那么它不应该查询SQL。
但是这里每次都要查询sql。 我怎么能避免这个?
context.xml
答案 0 :(得分:-2)
Nodejs是异步的,你需要使用回调,但你在同步循环中运行异步代码。
查看 async 模块:https://github.com/caolan/async。存在异步循环,例如forEach或eachSerie。
答案 1 :(得分:-2)
Node JS查询函数是异步的,因此首先从数组中删除重复项,然后开始查询。
以下代码将删除数组 ids 中的重复项。
ids.filter(function(elem, index) {
return ids.indexOf(elem) == index;
});
<强>编辑:强>
否则同步查询。但它在节点js中不是一个好习惯。
var ids = [62519, 1, 2, 3, 2656, 82969, 36201, 82969, 78788, 82969, 97647, 82969, 53745, 54510, 60850, 82969, 29872, 51407, 29347, 105113];
var cnames = {};
getAllNames(ids.length);
function getAllNames(lastIndex) {
var nlid = ids[lastIndex];
console.log(nlid);
if(lastIndex <= 0) // fully iterated
return;
if (cnames[nlid] !== undefined) {
console.log('already present');
} else {
console.log('not present');
sqlcon.query('select name from ss_newsletters where newsletterid=' + nlid + ' limit 1', function(err, rows, fields) {
if (err) {
console.error(err);
} else {
var x = rows[0].name;
cnames[nlid] = x;
}
getAllNames(lastIndex - 1); // Call Synchronously
});
}
}