在节点js中的async.forEach中返回值?

时间:2012-10-29 22:35:56

标签: node.js async.js

我开始学习node.js,并在一个RSS中汇总多个RSS Feed,我正在研究这些Feed,然后从我想要的数据中重新创建一个唯一的Feed。

因此,为了异步处理多个http请求,我使用https://github.com/caolan/async#forEach来完成工作。

但我无法弄清楚如何返回一个值(在我的情况下是rss xml feed)。

这是我的代码:

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

console.log(rssFeed)我可以看到rss feed,所以我觉得我错过了一些明显的东西。

如何返回rssFeed值?

让我重新坐下来的一些帮助会很棒,谢谢!

1 个答案:

答案 0 :(得分: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
});