【发布时间】:2020-10-14 11:48:31
【问题描述】:
需要一些帮助来纠正 javascript 中的循环闭包。
必需流程:运行 MasterGet 函数,从 mysql 表中获取数据,为获取的每条记录运行一组“规则”。
面临的问题:如果提取了两条记录,同时为记录 1 运行“规则”,记录 2 的“规则”也会被触发。只有在记录 1 的“规则”操作完成后,才会检查是否需要修改记录 2 处的代码。
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);
}
所以在第一条记录的循环中,它检查 rule11,如果 rule11 为真,那么它必须使用给定的变量执行 'modifyOrder',在 'modifyOrder' 完成后,然后返回循环并检查第 2 次记录。如果第一条记录的 Rule11 为假,那么它应该自动返回循环并检查第二条记录。
目前通过给定的更改,在“modifyOrder”完成之前触发第二次记录检查。也许问题是代码不等待来自“modifyOrder”的回调?是这个问题吗?如果启动,如何让代码等到“modifyOrder”完成。
【问题讨论】: