0

pivotal-nodenode.js のモジュールを使用して、完成した重要なストーリーの配列を返したいと考えています。

app.get('/delivered_stories', function(request, response) {             
  pivotal.useToken("my_token");
  pivotal.getProjects(function (err, data) {
    var project_ids = data.project.map(function(x) { return parseInt(x.id); });
    console.log('Retrived project ids: '.blue + project_ids);

    project_ids.forEach(function(id) {
      pivotal.getStories(id, { filter: "state:finished" }, function(err, story) {
        response.send(story);
      });
    });
    response.end(); // End the JSON array and response.
  });
});

私が間違っていることは何ですか?そして、それを修正する方法は?エラーが発生します:

http.js:708
    throw new Error('Can\'t set headers after they are sent.');
          ^
Error: Can't set headers after they are sent.

コード全体: https://gist.github.com/regedarek/30b2f35e92a7f98f4e20

4

1 に答える 1

2

pivotal.getStories()非同期です。

そのコールバック (したがってresponse.send()) は、残りのコード ( を含む)の後で実行されます。response.end()

実際、電話をかけるべきではありませんresponse.end()response.send()あなたのためにそれを行います。

response.send()また、複数回呼び出すことはできません。すべての結果を単一の配列に結合して送信する必要があります。
これは簡単ではありません。async.js または promise の使用を検討してください。

于 2013-03-29T14:22:20.907 に答える