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

xav*_*ard 5 node.js async.js

我开始学习node.js,并在一个中汇总多个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;
    }
  );
}
Run Code Online (Sandbox Code Playgroud)

console.log(rssFeed)我可以看到RSS提要,所以我觉得我失去了一些东西明显.

我怎样才能返回rssFeed值?

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

泽维尔

Vad*_*hev 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
});
Run Code Online (Sandbox Code Playgroud)