在 Node.js 中处理循环内的查询

2024-02-07

在下面的代码中,由于异步行为, val 变量值不断变化并生成意外的输出,即在第一个循环的连接查询完成之前, var 变量根据第二个循环并生成错误的输出。处理循环中查询的最佳方法是什么避免由异步性质引起的特性。

    var output = [];
    for ( var j = 0; j < someArr.length ; j++ ) {
         val = someArr[j];//some manipulation of someArr[j]
         connection.query( "select id from someTable where someCol = ?",val, function(err, rows, fields) {
             if ( err ) {
               console.log( err );
             } else {
               output.push( rows[0].someVal );//push query output to this variable
             }
       });
    }

console.log(output);//应该包含所有查询的输出。


只需使用闭包来生成临时作用域

var output;
    for ( var j = 0; j < someArr.length ; j++ ) {
         tVal = someArr[j];//some manipulation of someArr[j]
         (function(val){
           connection.query( "select id from someTable where someCol = ?",val, function(err, rows, fields) {
               if ( err ) {
                 console.log( err );
               } else {
                 output.push( rows[0].someVal );//push query output to this variable
               }
           });
         })(tVal);
    }

Theory

执行上下文

JavaScript 是一种单线程语言,这意味着一次只能执行一个任务。当 JavaScript 解释器最初执行代码时,默认情况下它首先进入全局执行上下文。从此时起,每次调用函数都将创建一个新的执行上下文。

范围链

对于每个执行上下文,都有一个与其耦合的作用域链。作用域链包含执行堆栈中每个执行上下文的变量对象。它用于确定变量访问和标识符解析。

解释

匿名函数帮助我们创建一个新的作用域“阻止”tVal因为什么时候执行一个新的scope被添加到scope chain含有val价值。 这个新的scope is a child of the parent scope其中for loop被执行,当循环继续时tVal改变但是val包含在child scope并且不受变化的影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Node.js 中处理循环内的查询 的相关文章

  • npmjs.org - 找不到自述文件

    我是 npm 包的主要作者scramjet 一个月以来 我遇到了关于可视性的问题README md在 npmjs 中 The npm 中的超燃冲压发动机包 https www npmjs com package scramjet shows
  • 缺少节点-v59-linux-x64/grpc_node.node

    我正在尝试在我的服务器中使用 Firebase admin SDK 当我部署时 出现错误 我在 firebase admin node module 映射中缺少文件 node v59 linux x64 grpc node node 我在包
  • Node.js 重写 toString

    我试图覆盖我的对象的默认 toString 方法 这是代码和问题 function test this code 0 later on I will set these this name test prototype toString f
  • editMessageReplyMarkup 方法删除内联键盘

    我正在使用 node js 制作一个电报机器人node telegram bot api图书馆 我回答callback query并想更换我的内联键盘 下面的代码显示了我如何尝试使用此方法 但是当我在电报中点击键盘时 它就消失了 bot o
  • Angular-cli AOT 构建失败,并显示“致命错误:CALL_AND_RETRY_LAST 分配失败 - JavaScript 堆内存不足”

    我正在尝试使用 AOT 构建我的 angular cli 项目 ng build aot 但它因错误而失败 致命错误 CALL AND RETRY LAST 分配失败 JavaScript 堆内存不足 如果我用 prod flag 任何想法
  • Cosmos DB Mongo API 如何管理“请求率很大”情况

    我有以下代码 async function bulkInsert db collectionName documents try const cosmosResults await db collection collectionName
  • 下载中带有文件名的 NodeJS sendFile

    我尝试使用以下代码将文件发送给客户端 router get get myfile function req res next res sendFile other file name dat 它工作正常 但当用户从以下网址下载此文件时我需要
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • 在 Node.js 中,setTimeout() 会阻止事件循环吗?

    如果我有一个简单的 setTimeout 函数 并将其设置为 10 秒 整个服务器在那10秒内就死机了 这是真的 这就是我听到的 答案是no 你的链接是什么Node js 如何重新创建 setTimeout 函数而不阻塞事件循环 https
  • 如何使用remark将markdown解析为json

    The 备注站点 https remark js org 有一个 AST 浏览器的链接 用于输出备注 https astexplorer net gist 0a92bbf654aca4fdfb3f139254cf0bad ffe102014
  • 无法使用 Nest CLI 创建新项目

    我正在关注this https docs nestjs com first steps创建 Nest 项目的教程 我已经安装了Nest CLI使用这个命令 npm i g nestjs cli 我使用以下命令检查了本地安装的软件包列表 发现
  • 如何使用对象数组创建猫鼬模式

    我有这个 json data id 1 name Sample test description this is a sample test category tests points 100 startDate 2018 02 15 00
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • 建立 TCP 连接边界的正确方法

    我的问题是关于如何正确处理使用 tcp 连接接收的数据 事实上 通过建立 tcp 连接 创建了一个流 假设我想发送一条有开头和结尾的消息 由于数据在流中流动而没有指定任何边界 我如何识别消息的开始和结束 我想在消息的开头和结尾处放置一些特殊
  • 除 .spec.js 之外的每个 .js 文件的节点 glob 模式

    我正在寻找更好的全局模式以供使用 我想找到所有 js文件但排除 spec js文件 到目前为止我有以下解决方案 我目前拥有的解决方案要求我不断添加文件扩展名以排除它们 否则它们会被拾取 例如 html files 我试图让它只寻找 js文件
  • 部署的 Firebase 函数无法对外部 API 执行 HTTP GET? [复制]

    这个问题在这里已经有答案了 我正在尝试创建我的第一个 Google Home Action 其功能与我的 Amazon Alexa Skill 相同 此操作的工作方式是 您执行一个意图 然后调用我的代码中的一个函数 调用该函数时 它会向外部
  • JavaScript 中的“REPL”是什么? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我看到了创建 REPL 的参考 什么
  • 运行“npm install”:Node-gyp 错误 - MSBUILD.exe 失败,退出代码:1

    我在跑npm install在 Windows 上安装我的项目中的所有软件包 然后我收到有关 MSBUILD exe 的错误 gyp ERR stack Error C Program Files x86 Microsoft Visual
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn

随机推荐

  • IE8浏览器模式与文档模式

    谁能解释一下 IE8 和 IE8 之间的区别浏览器模式 and 文档模式简单来说 是什么导致浏览器模式发生变化 是什么导致文档模式改变 如果用户通过开发人员工具更改模式 即使刷新页面 更改是否仍然存在 我问这个问题是因为我们正在这里做一些
  • 使用输入 fn 在 Tensorflow 估计器中进行预测

    我使用来自的教程代码https github com tensorflow tensorflow blob r1 3 tensorflow examples learn wide n deep tutorial py https githu
  • XML - 将属性反序列化为 Xml 子树

    当我反序列化 xml 字符串时 我需要在名为prop2 My XML
  • R 中的字符串操作:删除多个位置的特定模式,而不删除模式实例之间的文本

    在 R 中 我尝试编写适用于字符串模式的任何改编的代码 字符串的一个例子是 string lt y 1 a b c d 2 e 1 f g 我只想删除包含 模式的部分 例如 b c 和 1 f 并留下 y 1 a d 2 e g 请注意 字
  • 在匹配元素处划分列表的 Pythonic 且有效的方法是什么?

    这非常类似于Python 根据条件拆分列表 https stackoverflow com questions 949098 python split a list based on a condition并且https nedbatche
  • 为 NSTableView 中的行着色

    我想要做的是当单击 I 按钮时设置 NSTableView 中所选行的背景颜色 我见过人们使用过的其他案例tableView willDisplayCell forTableColumn row and setBackgroundColor
  • Elasticsearch - 维护文档历史记录

    我是 Elasticsearch 的新手 有一个非常基本的问题要问 我计划使用 Elasticsearch 作为文档存储 并且在存储文档时 我的要求之一是维护历史数据 因此 我可以成功地将文档发布到 Elasticsearch 但是当我发布
  • Perl 中哈希数组树的路径列表

    我有一系列路径 C A C B C D AB 我希望将它们放在哈希数组树中 这样我就可以在 TT2 模板中遍历它们 我的意思是这样的 dirs name gt C subs gt name gt A subs gt name gt B su
  • 在 Android Studio 中使用 NDK、Gradle 和 CMake 链接外部库

    经过一段时间的间隔后 我又回到了 Android 开发 我的旧的基于 ANT 的构建链似乎不再与最新的 SDK 一起运行 这是一个单独的问题 所以我尝试以新的方式做事 这是基于gradle 和 CMake 我的项目需要许多预构建的静态和动态
  • 使用自定义文件格式创建 TensorFlow 数据集

    我正在尝试创建一个 tf data Dataset 其中文件名映射到深度图像 我的图像保存为原始二进制文件 每个文件 320 240 4 字节 图像为 320x240 像素 用 4 个字节表示一个像素 我无法弄清楚如何创建一个解析函数 该函
  • 更改 MariaDB 中的列名称

    我在这个数据库中有此列 其中包含空格键 我想更改它 ALTER TABLE CHANGE COLUMN Anzahl Personen AnzahlPersonen int 11 在命令行中使用此行后 输出如下 ERROR 1064 420
  • 使用敏感设置信息部署到 Heroku

    我使用 GitHub 来存储代码 使用 Heroku 作为 Rails 应用程序的部署平台 我不想在 Git 下保存敏感数据 此类数据包括数据库文件设置 database yml 和一些具有秘密 API 密钥的其他文件 当我部署到herok
  • 从命令行查找并替换 unix

    我有一个多行文本文件 其中每行都有格式 Game 29832 我想将字符 1 附加到每行的每个数字 每行都不同 有谁知道如何从命令行执行此操作 Thanks sed i e s Game 0 9 1 file i用于就地编辑 并且 表示与模
  • 在 NodeJS 中对 SAML2 请求进行数字签名

    我想要对以下 SAML 请求进行数字签名
  • 在服务器套接字java中从客户端获取数据

    我正在创建一个执行以下任务的服务器应用程序 接受客户端的连接 将每个客户端连接处理到单独的线程 接收来自客户端的数据 发送数据给客户端 我能够连接客户端 但无法从客户端接收数据 仅当该客户端断开连接时 数据才在我的控制台中可见 Code p
  • 自动终止 mysql 睡眠进程的 Shell 脚本

    我们如何杀死 mysql 睡眠进程 例如 Id User Host db Command Time State Info
  • php echo 和 return 在 jQuery ajax 调用方面的区别[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在使 jQuery Ajax 调用
  • 如何验证日期不是 .net c# 中的未来日期

    只是徘徊 我如何验证该日期不是 net c 中的未来日期 Example 我已在那里应用了验证以进行所需的字段验证 但不知何故 我不知道如何应用验证来检查开始日期 以确保它不是未来日期 日期不大于当前日期 tr td align right
  • 如何使用 QFileDialog 选项并检索 saveFileName?

    我正在尝试使用 QFileDialog 提示用户提供文件名和保存文本文件的位置 我尝试了 QtGui QFileDialog getSaveFileName 但我对使用某些选项感兴趣 例如设置默认后缀 以及启用保存文件对话框的详细信息视图
  • 在 Node.js 中处理循环内的查询

    在下面的代码中 由于异步行为 val 变量值不断变化并生成意外的输出 即在第一个循环的连接查询完成之前 var 变量根据第二个循环并生成错误的输出 处理循环中查询的最佳方法是什么避免由异步性质引起的特性 var output for var