gpt4 book ai didi

javascript - nodejs for 循环,调用异步 Mongo 函数 - 但 Mongo 函数仅针对最后一项调用 X 次

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

我有一个例子,我运行循环 n 次,对于每个循环调用,我要检查几个 mongo 集合(例如 A 和 B)中是否存在值,然后在集合 C 中更新插入

for (i=0;i<n;i++)
{
Console.log("started call to doSomething for " + i);
doSomething(i);
Console.log("End call to doSomething for " + i);
}

function doSomething(i)
{
console.log("started doing something for " + i);
calltoMongo(i);
}

function calltoMongo(i);
{
common.db.collection.find(err,result)
{
console.log("here for " + i);
common.db.collection.insert(<some object >);
}
}

上面只是我所拥有的伪代码,输出非常疯狂假设我在 for 循环中运行 3 个元素

输出将是

started call to doSomething for 1
started doing something for 1
End call to doSomething for 1
started call to doSomething for 2
started doing something for 2
End call to doSomething for 2
here for 2
here for 2

我束手无策,我明白由于作用域解析而发生了一些有趣的事情,因为循环结束时只保留最后一个元素值,并且mongo端代码仅在作用域中保留的值是最后一个值之后才开始工作,但我不知道如何真正修复它,即使我在调用Mongo函数时将 sleep 放在最后,它也没有帮助。

最佳答案

您正在创建一个闭包,其中对函数的每次调用都保留对包含 i 的堆栈帧的引用。由于 DB 函数是异步的,因此它仅在 i 达到其最终值后运行。

Related

就实际解决您的问题而言,我会使用 promise 链,除非您需要它们并行运行。

关于javascript - nodejs for 循环,调用异步 Mongo 函数 - 但 Mongo 函数仅针对最后一项调用 X 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013744/

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