нужна помощь в исправлении закрытия цикла в javascript.
Требуемый поток: функция MasterGet запускается, данные извлекаются из таблицы mysql, для каждой извлеченной записи запускается набор «правил».
Проблема: если извлекаются две записи, в то время как "правила" выполняются для записи 1, "правила" записи 2 также срабатывают. Необходимость изменить код, такой как запись 2, проверяется только после того, как действие «правила» завершено для записи 1.
function MasterGet() {
var countCheckRule = 0;
connection.query(
'SELECT * FROM MASTER',
function selectCb(error, rows, fields) {
if (error) {
console.log('Log 045 - GetData Error: ' + error.message);
return;
}
for (var i = 0; i < rows.length; i++) {
console.log(+ rows[i].INDEX1);
var firstResult = rows[i];
rules.checRules(firstResult, myhttp, function (rules_res) {
firstResult.rules = rules_res;
})
}
});
countCheckRule++;
setTimeout(funcL, 4000);
};
Any guidance will help. Thanks
Добавлено к проблеме: код rules.checrules выглядит следующим образом:
exports.checRules = function (A, myhttp, _callback) {
var objrules = { 'rule12': false };
function rule11() {
if (A.NQ > 0 && A.PSQ > 0) {
objrules.rule11 = true;
if (config.execute) {
modifyOrder('S', 'A.BQ', A.TS);
}
} else {
objrules.rule11 = false;
}
}
rule11();
_callback(objrules);
}
Таким образом, в цикле для 1-й записи он проверяет правило 11, и если правило 11 истинно, то он должен выполнить «modifyOrder» с заданными переменными после завершения «modifyOrder», затем вернуться к циклу и проверить 2-ю запись. Если Rule11 ложно для 1-й записи, то он должен автоматически вернуться в цикл и проверить 2-ю запись.
В настоящее время с указанными изменениями 2-я проверка записи запускается до завершения 'modifyOrder'. Может быть, проблема в том, что код не ждет обратного вызова от «modifyOrder»? Это проблема? Как я могу заставить код ждать завершения «modifyOrder», если он запущен.