gpt4 book ai didi

javascript - 循环跳过 Mongo 数据库中的记录

转载 作者:行者123 更新时间:2023-12-03 01:47:57 25 4
gpt4 key购买 nike

我遇到了一个非常奇特的错误。

我有一个包含以下记录的数据库:

{
"_id": {
"$oid": "xxxxxxxxxxxxxxxxx"
},
"name": "Name1",
"number": 42
}

{
"_id": {
"$oid": "xxxxxxxxxxxxxxxxx"
},
"name": "Name2",
"number": 123
}

在我的 JavaScript 代码中,我有以下代码:

MyRecords.find({}, function(err, results) {
if (err) {
console.log("Error finding phone recipients:", err);
} else if (results.length == 0) {
console.log("No users");
} else {
for (var i = 0; i < results.length; i++) {
var result = results[i];

someFunction2("", result);

someFunction1(function(message) {
someFunction2(message, result);
});

result.number = "Some new value"
result.save(function(err) {
if (err) {
console.log("Error updating last sent for", result.name);
} else {
console.log("Updated last sent time for user:", result.name);
}
});
}
}
}

假设 someFunction1someFunction2 进行一些 API 调用并等待结果几毫秒。

当我运行此命令时,控制台打印出:

更新了用户的上次发送时间:Name2

用户Name1未被处理。这是怎么回事?

最佳答案

Assume that someFunction1 and someFunction2 make some API calls and wait for results for a few milliseconds.

您好,这正是您的问题。一旦 someFunction2 和 someFunction1 从 API 检索到数据,循环就已经运行,并且“result”的值将是循环中的最后一个值。

避免这种情况的一种方法是将它们抽象为循环外部的函数,该函数接收“结果”作为参数,如下所示:

MyRecords.find({}, function(err, results) {

function processResult(result) {
someFunction2("", result);
someFunction1(function(message) {
someFunction2(message, result);
});
result.number = "Some new value"
result.save(function(err) {
if (err) {
console.log("Error updating last sent for", result.name);
} else {
console.log("Updated last sent time for user:", result.name);
}
});
}

if (err) {
console.log("Error finding phone recipients:", err);
} else if (results.length == 0) {
console.log("No users");
} else {
for (var i = 0; i < results.length; i++) {
processResult(results[i]);
}
}
}

希望对你有帮助

关于javascript - 循环跳过 Mongo 数据库中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548076/

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