【发布时间】:2021-03-19 12:53:43
【问题描述】:
我在一个函数上运行一个 for 循环,并且每次循环都会更新数据库。然后,它使用 for 循环再次调用数据库来更新数据库上的值。但是,似乎我正在获取缓存的结果。这个错误有什么原因吗?
我可以发布我的代码,但这有点乏味。 这是一个调用数据库请求的模块函数上的简单 for 循环,然后更新该数据库。
module.exports.newElectronicHyperCredit = function(request){
gt = request.body.custom + "-" + Date.now()
db.query(
"SELECT * FROM Tenderizer.Stats ORDER BY ID DESC LIMIT 1",
[
],
function(error, stats){
bsr = stats[0]['BuySellRate'];
dv = stats[0]['DollarValue'];
credits = stats[0]['Credits'];
for(i = 0; i < request.body.quantity; i++){
bsr = dv / credits;
dv = Number(dv) + 10;
credits = Number(credits) + (7 / BSR);
denomination = 7 / bsr;
db.query(
"INSERT INTO Tenderizer.Stats SET ?",
{
BuySellRate: bsr,
DollarValue: dv,
Credits: credits
},
function(error, stats){
}
)
db.query(
"SELECT * FROM Tenderizer.Withdrawals ORDER BY case when Withdrawals.Owner = 'Rah1337' then 1 else 2 end, Withdrawals.ID DESC",
[
],
function(error, withdrawals){
withdrawn = 0;
for(x in withdrawals){
if(denomination != 0){
if(withdrawals[x]['Denomination'] > denomination){
withdrawn = withdrawn + denomination;
db.query(
"UPDATE Tenderizer.Withdrawals SET Denomination = Denomination - ? WHERE ID = ?",
[
denomination,
withdrawals[x]['ID']
],
function(error, points){
}
);
db.query(
"INSERT INTO Tenderizer.Points SET ?",
{
GenerationTag: withdrawals[x]['GenerationTag'],
Owner: request.body.custom,
Denomination: denomination,
BoughtPoint: bsr,
Since: Date.now()
},
function(error, points){
}
);
db.query(
"INSERT INTO Tenderizer.Payouts SET ?",
{
GenerationTag: withdrawals[x]['GenerationTag'],
Owner: withdrawals[x]['Owner'],
DollarValue: bsr * withdrawals[x]['Denomination'],
Denomination: denomination,
Processed: 0,
Since: Date.now()
},
function(error, payouts){
}
);
denomination = 0;
}else{
withdrawn = withdrawn + denomination;
db.query(
"DELETE FROM Tenderizer.Withdrawals WHERE ID = ?",
[
withdrawals[x]['ID']
],
function(error, withdrawals){
}
);
db.query(
"INSERT INTO Tenderizer.Points SET ?",
{
GenerationTag: withdrawals[x]['GenerationTag'],
Owner: request.body.custom,
Denomination: withdrawals[x]['Denomination'],
BoughtPoint: bsr,
Since: Date.now()
},
function(error, points){
}
);
db.query(
"INSERT INTO Tenderizer.Payouts SET ?",
{
GenerationTag: withdrawals[x]['GenerationTag'],
Owner: withdrawals[x]['Owner'],
DollarValue: bsr * withdrawals[x]['Denomination'],
Denomination: withdrawals[x]['Denomination'],
Processed: 0,
Since: Date.now()
},
function(error, payouts){
}
);
denomination = denomination - withdrawals[x]['Denomination'];
}
}
}
if(denomination > 0){
db.query(
"INSERT INTO Tenderizer.Pool SET ?",
{
GenerationTag: gt,
Username: request.body.custom,
DollarValue: 10 - (withdrawn * bsr),
Withdrawn: 0,
Since: Date.now()
},
function(error, pool){
}
);
db.query(
"INSERT INTO Tenderizer.Points SET ?",
{
GenerationTag: gt,
Owner: request.body.custom,
Denomination: denomination,
BoughtPoint: bsr,
Since: Date.now()
},
function(error, points){
}
);
}
db.query(
"UPDATE Tenderizer.EHC_Count SET Credits = Credits + ? WHERE Username = ?",
[
7 / bsr
],
function(error, ehc_count){
}
);
}
);
}
}
);
};
它不是一个一个地插入记录,而是一次插入所有记录,或者使用缓存的结果。因为我在数据库中收到的行是 重复行而不是递增行。在面额栏中的积分表和购买的积分中。
【问题讨论】:
-
无论如何,请添加在您的问题范围内有意义的代码
-
我添加了代码...
-
这不是添加,而是仅发布您知道可能存在错误、异常或得到意外结果的相关代码段
-
我建议你把你的模块分解成更易于管理的小块,并一点一点地调试你的代码......你的模块很复杂,有大量嵌套的数据库调用,回调函数, if/else 语句等
-
好的,我试试看。