【问题标题】:Return value in a async.forEach in node js?在节点 js 中的 async.forEach 中返回值?
【发布时间】:2012-10-19 07:13:30
【问题描述】:

我开始学习 node.js,并将多个 rss 提要聚合到一个提要中,我正在获取提要,然后根据我获取的数据重新创建一个唯一提要。

因此,为了异步处理多个 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;
    }
  );
}

console.log(rssFeed) 我可以看到 rss 提要,所以我认为我遗漏了一些明显的东西。

如何返回 rssFeed 值?

如果能帮助我回到座位上会很棒,谢谢!

泽维尔

【问题讨论】:

    标签: node.js async.js


    【解决方案1】:

    您不能从异步函数返回值。您需要将其传递给回调函数。像这样:

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

    【讨论】:

    • 谢谢!这是我显然错过的!我的 RSS 提要现在可以使用了!很棒
    • items 是否在某处声明并从 parseAndProcessFeed 内部调用,类似于 items.push(item)
    猜你喜欢
    • 2021-05-04
    • 2017-08-13
    • 2017-03-20
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多