Одним из способов достижения этого без использования другой библиотеки является использование «рекурсивного шаблона».
Вы не можете выполнить какой-то асинхронный вызов в цикле for.
card_keys должен быть массивом.
Полезная ссылка о том, как написать цикл:
- http://tech.richardrodger.com/2011/04/21/node-js-%E2%80%93-how-to-write-a-for-loop-with-callbacks/
- http://metaduck.com/post/2675027550/asynchronous-iteration-patterns-in-node-js
РЕДАКТИРОВАТЬ: Как сказал Рейнос, вместо этого следует использовать подсчет ссылок.
Я предлагаю вам использовать lib и сделать что-то подобное с async:
...
var deals = []
async.forEach(card_keys, function(err, results) {
if (err) {
callback(err);
} else {
deals.push(results); // For each card
}
}, function(err) {
callback(deals); // When it's completed
});
...
Вот как async делает forEach
async.forEach = function (arr, iterator, callback) {
if (!arr.length) {
return callback();
}
var completed = 0;
_forEach(arr, function (x) {
iterator(x, function (err) {
if (err) {
callback(err);
callback = function () {};
}
else {
completed += 1;
if (completed === arr.length) {
callback();
}
}
});
});
};
Редактировать: Какой из них быстрее: подсчет ссылок или рекурсивный шаблон
Я сделал 100 базовых запросов:
Воскресение: 7161,7528, 7226 мс
Подсчет ссылок: 7515, 7256, 7364 MS
Код рекурсивного шаблона:
var req = "select id from membre";
var time = new Date().getTime();
var test = function(value,callback) {
if(value < 100) {
client.query(req, function(err, results) {
test(++value,callback);
});
} else {
callback();
}
}
test(0, function() {
var time2 = new Date().getTime();
console.log(time2-time);
client.end();
});
Код для подсчета ссылок:
var req = "select id from membre";
var time = new Date().getTime();
var test = function(callback) {
var c = 100;
function next() {
if(--c === 0) callback();
}
for(var i =0; i < c; i++) {
client.query(req, function(err) {
next();
});
}
};
test(function() {
var time2 = new Date().getTime();
console.log(t2-t);
client.end();
});
Почему это почти в одно и то же время? Поскольку это mysql , мы не получаем так много от "асинхронного" узла-js в в этой ситуации , Смотрите комментарии.