gpt4 book ai didi

javascript - Node.js for() 循环在每个循环中返回相同的值

转载 作者:IT老高 更新时间:2023-10-28 23:07:05 28 4
gpt4 key购买 nike

我正在制作这个非常简单的应用程序来帮助我探索 nodejs,并且我有一个特定的处理程序,它可以根据我的数据库中的前 10 条消息生成 HTML 代码。我遇到问题的片段循环遍历消息并调用生成 HTML 的函数并将结果附加到我的 html 字符串。

function CreateMessageboard(BoardMessages){
var htmlMessageboardString = "";

[... Console debug code ...]

for(var i = 0; i < BoardMessages.length;i++){
(function(){
var j = i;
console.log("Loading message %d".green, j);
htmlMessageboardString += MessageToHTMLString(BoardMessages[j]);
})();
}
}

我认为我的问题是由于 Javascript 处理循环的方式,与我读到的闭包有关,这是我在上面尝试使用的,或者是 nodejs 处理我的函数的异步方式。现在 10 个结果从 db 中很好地返回,但最后一条消息在每个循环中处理。

我也尝试过,而不是执行 var j = i,而是将值 i 作为函数参数并将其传递到闭包中,无论如何它返回了相同的结果。

我感觉我缺少解决问题的关键知识,我可以解释一下这个问题吗?

编辑:欢迎我提供有关代码的任何其他信息,我会发布整个 git repo 但人们可能不想浏览整个项目来帮助我调试这个问题,所以我发布了整个注释中的函数以提供更多上下文。

最佳答案

  for(var i = 0; i < BoardMessages.length;i++){
(function(j){
console.log("Loading message %d".green, j);
htmlMessageboardString += MessageToHTMLString(BoardMessages[j]);
})(i);
}

应该可以的;但是,您永远不应该在循环中创建函数。因此,

  for(var i = 0; i < BoardMessages.length;i++){
composeMessage(BoardMessages[i]);
}

function composeMessage(message){
console.log("Loading message %d".green, message);
htmlMessageboardString += MessageToHTMLString(message);
}

关于javascript - Node.js for() 循环在每个循环中返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234898/

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