gpt4 book ai didi

javascript - 异步for循环

转载 作者:行者123 更新时间:2023-11-28 05:09:36 25 4
gpt4 key购买 nike

好的,下面的代码对我来说工作正常,这是我执行异步循环的常用方法(计数是异步的)。因此,在回调之前,我会记录 3 个数字,原则上是不同的。

var arrayIds = ['a', 'b', 'c'];
var totalIds = arrayIds.length;
var done = 0;
var count = 0;
for (var i = 0; i < arrayIds.length; i++) {
mongoose.Model.count({ 'likes.id': arrayIds[i] }, function (err, c) {
count += c;
console.log(c);
if (++done < totalIds) return; //else
callback(count);
})
}

但我不知道在其他情况下发生了什么,具有相同的理念,请帮助:

var arrayIds = ['a', 'b', 'c'];
var totalIds = arrayIds.length;
var done = 0;
var likesPartial = [];
for (var m = 0; m < arrayIds.length; m++) {
likesPartial.push(arrayIds[m]);
profiles.count({ 'likes.id': { $in: likesPartial } }, function (err, u){
console.log(u);
if (++done < totalIds) return; //else
callback(u);
})
}

问题是我记录了相同的 3 个数字(具有预期的最后一个“u”的值,即最后回调的值),而原则上它们应该是不同的,因为 likesPartial 数组在每一步都有一个不同数量的元素。

这两个例子对我来说很相似,这就是为什么我找不到错误。

谢谢。

最佳答案

在第一个示例中,您将使用每个回调更新 count,当最后一个回调到来时,您将调用 callback 并使用 中的最终结果>计数。这是有道理的。

您的第二个示例明显不同:它接收多个值,但忽略除最后一个值之外的所有值(除了记录它们),然后仅使用最后一个值调用回调 u 它接收到。因此,之前收到的 u 被丢弃,这似乎并没有立即意义(尤其是因为你无法知道它是哪个 u ,假设操作是异步的;它们可以按任何顺序完成)。

<小时/>

我注意到的另一件事是:

profiles.count({ 'likes.id': { $in: likesPartial } }, function (err, u){
// ----------------------------^^^^^^^^^^^^^^^^^

您每次都会传入 likesPartial数组,而在第一个代码片段中,您会传递一个 ID (arrayIds[i]),不是数组。

关于javascript - 异步for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41480379/

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