【问题标题】:Return a value using Caolan's async module使用 Caolan 的 async 模块返回值
【发布时间】:2014-04-24 07:17:37
【问题描述】:

我想知道是否可以使用 async.each 方法进行一系列计算并获取返回值。一个非常简单的例子是计算数组中所有元素的总和。

function Calculator() {

}

Calculator.prototype.sum = function(elements, callback) {
  var total = 0;
  async.each(elements, function(element, callback) {
    total += element;
    callback();
  }, function(err) {
    if (err) throw err;
    //How can I get total as a returned value of sum?
  });
}

谢谢

【问题讨论】:

  • 对元素数组求和是一个同步操作。为什么要使用async.each 而不是普通的数组循环?
  • 正如我所说,这只是一个简单的例子。一个更复杂的例子应该是计算一个用户在他所有社交网络中的好友总数,你应该传递一个社交网络列表和一个用户名。每个社交网络上的每个朋友计数都将以异步方式检索,对吗?最后,我想总结所有这些朋友的数量并将其返回以供下一步操作。我可以看到另一种解决方案是使用结果作为参数传递回调,但是单元测试很难,不是吗?
  • 使用 Promise 还为时不晚

标签: javascript node.js async.js


【解决方案1】:

是的,应该可以:您可以使用async.reduce。 (虽然这需要对您的代码进行一些更改,但当前值必须通过回调传递。

文档中的示例:

async.reduce([1,2,3], 0, function(memo, item, callback){
    // pointless async:
    process.nextTick(function(){
        callback(null, memo + item)
    });
}, function(err, result){
    // result is now equal to the last value of memo, which is 6
});

【讨论】:

  • 是的,但是如何将结果值(即 6)返回给调用者函数?
  • @passkey1510 通过回调。您不能将其作为函数的返回值传回。这不是异步代码的工作原理!
  • 好的,非常感谢@TheHippo。你再次为我证实了这一点:)。处理返回值的唯一方法是使用回调!
猜你喜欢
  • 2021-10-10
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2014-03-15
  • 2016-04-12
  • 2020-09-03
  • 1970-01-01
相关资源
最近更新 更多