NodeJS javascript 中的异步响应循环

2024-01-17

我有一个使用 Express 4 的 NodeJS API。我使用 Sequelize 连接到数据库,并多次调用一个查询。我想将结果累积到一个数组中。问题是res.send不等待循环结束来发送答案。

my code

router.post('/payrollReport/', function(req, res, next) {
    var usersRecord = [];
    models.user.findAll(
    ).then(function(users) {
      for (var i = 0; i < users.length; i++) {
            models.sequelize.query('SELECT forms.name, COUNT(form_submits.form_id)  ' +
                    'FROM form_submits ' + 
                    'LEFT JOIN forms ON forms.form_id = form_submits.form_id ' +
                    'WHERE form_submits.user_id = ' + users[i].user_id +
                    'AND date("form_submits"."createdAt") >=' + req.body.begin +
                    'AND date("form_submits"."createdAt") <=' + req.body.end +
                    " GROUP BY forms.name")
             .then(function(results){
                 usersRecord.push(results[0]);
                 console.log(usersRecord);
            });      
      };
    }).catch(function(error) {
      res.status(500).send(error);
    });  
    res.send(usersRecord);
});

感谢您的帮助

EDIT

使用 forEach 添加正确的代码

router.post('/payrollReport/', function(req, res, next) {
    var usersRecord = [];
    models.user.findAll(
    ).then(function(users) {
       async.forEachOf(users, function iterator(user, index, callback) {
            models.sequelize.query('SELECT forms.name, COUNT(form_submits.form_id)  ' +
                    'FROM form_submits ' + 
                    'LEFT JOIN forms ON forms.form_id = form_submits.form_id ' +
                    'WHERE form_submits.user_id = ' + user.user_id +
                    'AND date("form_submits"."createdAt") >=' + req.body.begin +
                    'AND date("form_submits"."createdAt") <=' + req.body.end +
                    " GROUP BY forms.name")
             .then(function(results){
                 results[0].unshift(user); 
                 usersRecord.push(results[0]);
                 callback();
            });   

         }, function (err) {
          if (err) console.error(err.message);
          res.send(usersRecord);
       });


    }).catch(function(error) {
      res.status(500).send(error);
    });  

});

由于node.js是异步工作的,你的res.send(usersRecord);命令在所有迭代完成之前执行。您可以使用async.foreach https://github.com/caolan/async#forEach为此,它将允许您仅在所有迭代完成后才运行发送。

有一个关于它的很棒的教程here http://www.sebastianseilund.com/nodejs-async-in-practice

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

NodeJS javascript 中的异步响应循环 的相关文章

  • 玉石压痕错误

    因此 对于我的 Express 网站 我使用 jade 所以我决定尝试修改我的布局文件 以便我可以开始设计我的网站 我修改了原始布局代码 有效 但我开始在任何扩展布局的文件中出现缩进错误 如下所示 500 Error home kevin
  • 如何正确地将节点从引用传递到上下文?

    我正在尝试将节点从引用传递到上下文 但是因为我在第一次渲染后没有重新渲染 所以传递的节 点是null 我考虑了两种变体 但我认为它们不是最好的 To pass ref代替ref current 但在用例中 我将被迫使用类似的东西contex
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 解释一下这个令人困惑的 dojo 教程声明语法

    我正在阅读使用的语法道场的声明 http dojotoolkit org documentation tutorials 1 8 declare 用于班级创建 描述很混乱 The declare function is defined in
  • 无需重定向的 HTML 页面提交

    有没有什么方法可以在不使用ajax的情况下提交html表单而无需从当前页面重定向 你可以设置一个target 为您form 这样您就可以将表单提交到新选项卡 target blank 或一个小的 隐藏的iframe target nameo
  • 带有node-gyp的node.js应用程序无法在azure网站上部署

    我已经建立了一个 Azure 网站 并且正在尝试使用依赖于 node gyp 的示例应用程序 我得到这个 emote gt email protected cdn cgi l email protection install C DWASF
  • 指定 HTML5 输入类型 = 日期的值输出?

    我想将本机日期选择器添加到我的应用程序中 该应用程序当前使用遗留的本地系统 日期输入支持尚未广泛普及 但如果我可以基于兼容性提供这两种实现 那就太理想了 有没有办法指定 HTML 日期选择器给出的值的输出 歌剧的默认设置是yyyy mm d
  • 为什么 Node js 无法识别 ejs 的结束括号

    我正在使用express和ejs在node js中创建一个图片库 以下是我的 app js 的代码 var express require express var app express app set view engine ejs ap
  • 替换img路径jquery

    我正在尝试替换 jquery 中的 img 路径 注入远程页面 replaceexample com thumbs withexample com images 我已经尝试过这个 但似乎不起作用 img attr src replace t
  • 修复 Raphaël 路径节点上 Tipsy 工具提示的位置

    这是一个非常具体且有些复杂的问题 所以我设置了一个最小测试用例 http reveal dk 8080 revealit dk tipsytest 在阅读本文的其余部分之前 您可能应该先了解一下 我的页面显示悬停时突出显示区域的图像Raph
  • document.write 在同一页面上显示内容。

    我对 javascript document write 方法有疑问 大多数情况下 当我使用 document write 时 它会向我显示在不同页面中使用该方法编写的内容 例如 如果我写这样的命令 document write Hello
  • JS:修改 JS 对象中的值/对

    我正在尝试找出修改对象的最佳方法 而无需三次写出类似的对象 所以我有这三个对象 var object1 start start end end type 1 var object2 start start end end type 2 va
  • 即使我的情况按预期发生变化,Angular ngClass 也不会更新我的课程

    我正在创建的模板中有类似的内容 div class nng 3 div 价值app layout isNavbarFixed等用零或一初始化 并且页面第一次加载时 适当的类被插入到我的div 不过 此后通
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 如何告诉node.js mysql没有在默认端口上运行?

    我遇到了与此人类似的问题 连接 ECONNREFUSED 节点 js sql https stackoverflow com questions 8825342 connect econnrefused node js sql 我正在尝试将
  • 获取类中的所有静态 getter

    假设我有这个类 我像枚举一样使用它 class Color static get Red return 0 static get Black return 1 有没有类似的东西Object keys to get Red Black 我使用
  • 节点未找到全局模块

    所以我意识到这是一个相当通用的标题和问题 但我已经搜索了很多答案 但遗憾的是它们似乎都不适合我 我希望通过我自己提供更多信息 也许有人有一个具体的答案 或者确切地知道将我重定向到哪个答案 我的问题 当我全局安装节点模块时 例如npm ins
  • 测试 jQueryUI 是否已加载

    我正在尝试调试网站 并且我认为 jQueryUI 可能未正确加载 如何测试 jQueryUI 是否已加载 if jQuery ui UI loaded OR if typeof jQuery ui undefined UI loaded 应
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解

随机推荐

  • 更改itms-services安装提示信息

    现在 我有一个定义如下的链接 a itms services action download manifest url https loqi me install Geoloqi plist a 当用户单击此链接时 将显示以下消息 该消息由
  • C++ 2.5 字节(20 位)整数

    我知道这很荒谬 但我需要它来优化存储 有什么好的方法用C 实现吗 它必须足够灵活 以便我可以将它用作普通数据类型 例如Vector lt int20 gt 运算符重载等 如果存储是您主要关心的问题 我怀疑您需要相当多的 20 位变量 将它们
  • 如何使用 Jquery 编写“如果未单击”或“如果在元素外部单击”?

    我有点陷入如何阻止菜单执行 fadeOut 函数的问题 当我单击菜单上的主链接打开子菜单时 它就会淡出 目前代码如下 a main menu item click function if rtmenu visible rtmenu clic
  • 从字节数组创建 8 位图像

    字节数组是这样获得的 BufferedImage image new Robot createScreenCapture new Rectangle screenDimension byte array DataBufferByte get
  • 目录最后修改日期

    我想知道目录上次修改日期何时更改 我修改了特定目录中的文件 通过 FTP 但该目录的 LMD 没有更改 它应该如何运作 当添加 删除或重命名文件或子目录时 目录本身的 mtime 修改时间 会发生变化 修改目录中文件的内容不会更改目录本身
  • iphone:从相机捕获的图像改变方向

    我制作了一个 iPhone 应用程序来从相机捕获图像并在下一个视图中设置该图像 但问题是图像被旋转了 即风景图像变成肖像 肖像图像变成风景 我参考了很多代码但无法得到解决方案 我的代码是 void btnCapturePressed if
  • rust 中的类型 `` 没有实现什么特征 `core::kinds::Sized` ?

    我预计这会起作用 trait Task
  • Java EE 7 CDI - 注入不起作用,发送 NullPointerException

    我的注射有问题 这是我第一次尝试 我正在使用 Wildfly 和 Java EE 7 我有一个NullPointerException当尝试访问时Authenticator实例在LoginController 我使用maven 我的bean
  • 迄今为止的 MySQL 字符串,具有包含时区说明符的给定格式

    我的数据库中有一个字符串列 Wed Aug 13 17 51 06 GMT 05 30 2014 我可以将其转换为日期并在 where 子句中使用它来获取记录吗 where Timecolumn gt CURDATE 7 请注意 时区说明符
  • 使用 NSBorderlessWindowMask 时出现灰色边框

    每当我尝试使用 NSBorderlessWindowMask 创建自定义窗口并将 NSView 例如 NSImageView 设置为其 contentView 时 我都会在 NSView 周围出现 1px 灰色边框 并且似乎无法摆脱它 我遵
  • 将多个文件中的空格转换为制表符 Sublime Text 2

    有没有办法将所有空格转换为制表符 而不是逐个文件转换 如果我打开一个文件并浏览View gt Indentation gt Convert Indentation to Tabs 它仅更改此文件 我想将整个项目中的缩进转换为制表符 Use
  • 如何在 django 中提供创建的临时文件

    我有一个远程存储项目 当用户请求他的文件时 django 服务器会在本地检索该文件 用于某些处理 并将其存储为临时文件 然后使用 mod x sendfile 将其提供给用户 我当然希望临时文件在提供给用户后被删除 文件指出NamedTem
  • Flutter,如何删除对话框周围的空白?

    我在从服务器获取数据时调用此对话框 该对话框周围有空格 我可以删除对话框周围的空白区域吗 这是我的代码 var bodyProgress new Container decoration new BoxDecoration color Co
  • 使

    我在 SO 上看到过类似的主题 但我的略有不同 我试图让我的父级 DIV 和子级 保持焦点 直到我将注意力从 div 上移开 但这似乎很难完成 This solution https stackoverflow com a 3089045
  • 使用 Cocoa 的 Accessibility API 获取应用程序的 Dock 图标的位置

    如何使用 Accessibility API 获取应用程序的 Dock 图标的位置 找到了 使用这个论坛帖子 http cocoadev com forums discussion 1431 getting dock icon positi
  • Elasticsearch.Net 和超时

    我有一个 4 节点的 Elasticsearch 集群 我有一个 net 控制台应用程序 旨在用来自 sql 的数据填充集群 只要我将添加 或删除 记录的速度保持在相当低的水平 一切都会正常 如果我最终增加线程数 我将从控制台应用程序中看到
  • 无法在 AngularJS 中从控制器设置日期选择器日期

    我正在尝试按按钮创建一个 AngularJS 日期选择器 我在用this http angular ui github io bootstrap datepickerbootstrap ui 控件 该控件可以工作 单击按钮就会弹出 我可以选
  • 通过 Go (go 1.18) 泛型创建类型化值的新对象

    我正在 go 1 18 的 beta 版本中使用泛型 下面示例中的创建函数应该创建新的实例 T 所以 Apple 我尝试使用反射包来实现这一点 但没有运气 你能告诉我如何更改功能吗Create从下面的示例中 它创建了实例T而不是返回 nil
  • 将所有代码从 master 转移到新分支并从 master 中删除代码

    我的代码位于项目的主分支中 我希望代码位于单独的分支中 而不是在主分支中 我可以创建一个新的分支master 但是在创建分支之后 是否可以从主分支中删除所有代码 这样如果我稍后重新调整或将我的新分支合并到主分支中 就不会导致任何问题 谢谢
  • NodeJS javascript 中的异步响应循环

    我有一个使用 Express 4 的 NodeJS API 我使用 Sequelize 连接到数据库 并多次调用一个查询 我想将结果累积到一个数组中 问题是res send不等待循环结束来发送答案 my code router post p