async.compose函数和underscore.compose函数有什么区别?

时间:2013-08-26 15:46:18

标签: javascript underscore.js async.js

两者似乎都在做同样的事情,即计算f(g(h(x))),当被调用时async.compose (f, g, h)_.compose (f, g, h)

这两个电话之间有什么区别吗?

2 个答案:

答案 0 :(得分:3)

顾名思义,async.compose组成异步函数。

它通过回调参数得到结果,而不是返回值。

答案 1 :(得分:1)

我面临同样的情况,我需要从某个lib获得一个函数来使用async.compose()调用的返回值。所以我确实想知道:如何从async.compose()获得返回值? 如果您write

var gotFromAsyncCompose = async.compose(
  function(gotParam, callback) {
    callback(null, 'hi ' + gotParam + '!';
  },
  function(name, callback) {
    callback(null, name.toUpperCase());
  }
);
var returnValue = gotFromAsyncCompose('moe', function(err, result){
  return result;
});
console.log(returnValue);

您将undefined作为returnValue的值 因此,async.compose()始终返回undefined作为返回值,即使最后执行的语句是return 'A';也是如此。你仍会得到undefined

关于_.compose(),我tried the same

var w = _.compose(
  function(name){
    return 'hi '+name;
  },
  function(got){
    return got.toUpperCase() +'!';
  });
);
var returnValue = w('moe');
console.log(returnValue);

这次,您'hi MOE!'的预期值为returnValue。您不会像undefined的行为那样async.compose()
我没有编写任何这些组合函数,但似乎两者之间的区别似乎是async.compose()不会返回任何值,而_.compose()将返回您传递给{{return的值1}}在最后执行的函数内。
但是,还有另一个区别:_.compose()不会处理您在函数中进行的任何异步调用。您必须在构成_.compose()的所有函数中仅编写同步代码

截至2014年4月28日我可以看到的四个主要差异是

  • async.compose()执行返回值
  • async.compose()确实负责函数
  • 中的异步调用
  • _。compose()确实返回一个值
  • _。compose()执行处理函数中的异步调用
相关问题