gpt4 book ai didi

javascript - Mongoose find() 回调问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:51 25 4
gpt4 key购买 nike

我找不到让我的查找功能正常工作的方法。我想从账单集合中找到所有 billId,然后检查事务数据库中的每个 billId。

问题是,由于 aSynch - 我认为 id 不会在我的循环中更新。这是代码:

Bills.find({type: bill_type, endDate: {"$gte" : new Date(year + "-" + month + "-1")}}).find(function(err, bills){
if(err)
res.send(err);

details.bills = bills;

for(key in bills){
var billId = bills[key]._id;
console.log("BillId: " + billId); // Here the ids are unique (which is what I want)

Transactions.find({billId : billId}, function(err, transactions){
if (err) {
console.log('error: '+ err)
} else {
console.log("Transaction BillId: " + billId); // Here I get always the same ID - which is not quiet what I need.
}
});


//console.log(transactions);
}

res.send(details);
});

控制台的结果是:

BillId: 549bf0597886c3763e000001
BillId: 54a014bfac01ca3526000001
BillId: 54a015753547a6c026000001

^ 好的结果 - 来自 for() 内的第一个 console.log。

然后:

Transaction BillId: 54a015753547a6c026000001
Transaction BillId: 54a015753547a6c026000001
Transaction BillId: 54a015753547a6c026000001

^ 错误结果 - 它重复了 for() 的最后一个结果,我需要所有结果。

在第一个 console.log() 中,当我从第一个 find() (Bills.find()) 获取结果时,我可以看到日志上的所有 id,但是当我尝试将它们放入第二个 Find (Transactions.find()) 中时,它们会重复最后一个 id。因此,在当前状态下,我无法查询数据库中的每个 id。如有任何帮助,我们将不胜感激。

如果您需要任何说明,请告诉我。

提前致谢!

最佳答案

循环内闭包函数的经典错误。

您的变量值会在每个循环步骤中发生变化。另一方面,当变量已经更改多次时,您的函数将在稍后(一段时间后)执行。

查看链接以进行澄清:

Creating closures in loops: A common mistake

JavaScript closure inside loops – simple practical example

Javascript infamous Loop issue?

关于javascript - Mongoose find() 回调问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com