我想渲染 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/