javascript - 如何从 forEach 函数聚合 json 对象数组?

标签 javascript json node.js

我想渲染 Node.js 中所有项目的故事数组。如何做到这一点?

app.get('/stories', function(request, response) {
  var projects_ids = [1,2]; 
  project_ids.forEach(function(id) {
    pivotal.getStories(id, function(err, project_stories) {
      console.log("Stories: " + project_stories);

      return JSON.stringify(project_stories);
    });
  });
  response.send(array_of_stories);
});

在日志中我得到:

Stories: [object Object]
Stories: [object Object]

最佳答案

由于 getStories 是异步的(基于 getStories 的方法签名的假设),您当前的方法将不起作用。如果可以的话,我建议您在 pivotal 上创建一个方法,可以获取多个项目 ID 的故事,这样您的代码将如下所示:

app.get('/stories', function(req, res) {
    var project_ids = [1, 2];
    pivotal.getStories(project_ids, function(err, project_stories) {
        res.send(project_stories);
    }
});

如果这不是一个选择,我建议您研究一个流库,例如node-seq 。然后你的代码可以读到这样的内容:

app.get('/stories', function(req, res) {
    var project_ids = [1, 2];
    Seq(project_ids)
        .parEach(function(project_id) {
            pivotal.getStories(project_id, this);
        })
        .seq(function() {
            var aggregatedStories = [];
            Hash.map(this.args, (function(arg) {
            // Each parSeq aparently results in an array of objects
                aggregatedStories.push(arg[0]);
            }));
            res.send(aggregatedStories);
        });
});

Hash.map 函数来自名为 hashish 的 Node 模块

编辑:详细说明一下,parEach 将并行执行函数,并且以下 seq 将在并行执行的所有回调完成后执行。 node-seq 将每次并行执行的结果放入后续 seq 的参数数组中,因此有点神秘的 Hash.map(this.args)

关于javascript - 如何从 forEach 函数聚合 json 对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15709432/

相关文章:

javascript - 为什么我会通过 await Promise.all 收到未处理的 Promise Rejection

javascript - 如何使用 D3JS 创建复杂的 SVG 形状?

JavaScript: `delete` 关键字的性能限制

java - 如何在自定义 json 序列化器中获取属性或字段名称

javascript - 获取 JSON 数据时遇到问题

node.js - npm 包安装在意外的位置

javascript - Csrf 验证失败 - Django Rest 和 Backbone.js

javascript - jQuery函数调用后,shadowbox停止工作

json - Apache 反向代理将 JSON 响应包装在 HTML 中

node.js - 我可以仅使用 Dialogfow 的默认履行 Webhook 代码作为 Azure 上的起点吗?