5

私は node.js を学び始めており、複数の RSS フィードを 1 つに集約するために、フィードをフェッチし、フェッチしたデータから固有のフィードを再作成しています。

したがって、複数の http リクエストを非同期に処理するために、仕事をするhttps://github.com/caolan/async#forEachを使用します。

しかし、値を返す方法がわかりません (私の場合は rss xml フィード)。

これが私のコードです:

function aggregate(topic) { 
  async.forEach(topic.feeds, 
    function(item, callback) {
      parseAndProcessFeed(item, callback);
    }, 
    function(err) {
      // sort items by date
      items.sort(function(a, b) {
       return (Date.parse(b.date) - Date.parse(a.name));
      });
      var rssFeed = createAggregatedFeed();
      console.log(rssFeed);
      return rssFeed;
    }
  );
}

RSSフィードをconsole.log(rssFeed)見ることができるので、明らかな何かが欠けていると思います。

どうすればrssFeed値を返すことができますか?

私を席に戻すためのいくつかの助けは素晴らしいでしょう、ありがとう!

ザビエル

4

1 に答える 1

8

非同期関数から値を返すことはできません。コールバック関数に渡す必要があります。このような:

function aggregate(topic, callback) { 
  async.forEach(topic.feeds, 
    function(item, callback) {
      parseAndProcessFeed(item, callback);
    }, 
    function(err) {
      // sort items by date
      items.sort(function(a, b) {
       return (Date.parse(b.date) - Date.parse(a.name));
      });
      var rssFeed = createAggregatedFeed();
      callback(err, rssFeed);
    }
  );
}

aggregate(someTopic, function(err, result) {
    // here is result of aggregate
});
于 2012-10-29T22:43:34.323 に答える