2013-03-29 2 views
1

node.js에있는 모든 프로젝트의 스토리 배열을 렌더링하고 싶습니다. 그렇게하는 방법? 로그에서forEach 함수에서 json 객체의 배열을 집계하는 방법은 무엇입니까?

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] 

답변

1

현재 접근 방식은 작동하지 않습니다. 당신이 할 수있는 경우에, 나는 당신의 코드를 읽을 것이다 있도록 여러 프로젝트 ID에 대한 이야기를 얻을 수 pivotal의 방법을 만드는 것이 제안 :

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.

Hash.map 기능 hashish

편집라는 노드 모듈에서입니다

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); 
     }); 
}); 

: 조금 더 정교은, parEach 병렬로 함수를 실행하고 seq 다음 그런 다음 코드는 다음과 같이 읽을 수 병렬 실행의 모든 ​​콜백이 끝난 후에 실행됩니다. node-seq은 각 병렬 실행의 결과를 다음 seq의 매개 변수 배열에 넣으므로 다소 암호화됩니다 Hash.map(this.args)

0

당신은 당신의 서버가 요청에 대한 응답으로 project_stories 객체의 배열을 보내려면? return 문이 어디로 반환되는지 잘 모르겠습니다. 따라서 요청에 대한 응답으로 객체 배열을 보내기 위해 다음과 비슷한 것을 시도해 보겠습니다. 편집 : 다른 사람들이 지적한 것처럼 .getStories은 비동기입니다. 어쩌면 당신은 시험해 볼 수도 있습니다, caolan's async module. 다음과 같이 구현 : getStories는 비동기 (가정 getStories의 방법 서명 기준)이기 때문에

var async = require('async'); 
var array_of_stories = []; 

var getStories = function(id, callback) { 
    pivotal.getStories(id, function(err, project_stories) { 
    array_of_stories.push(project_stories); 
    }); 
} 

app.get('/stories', function(request, response) { 
    var projects_ids = [1,2]; 
    async.forEach(project_ids, getStories, function(error) { 
    if(!error){ 
     response.send(array_of_stories); 
    } 
    }); 
}); 
관련 문제