1

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

这两个调用有什么区别吗?

4

2 回答 2

3

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

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

于 2013-08-26T15:49:14.160 回答
1

我遇到了同样的情况,我需要从某个库获得的一个函数来使用async.compose()调用的返回值。所以我确实想知道:如何从 中获取返回值async.compose()
如果你

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()始终作为返回值返回。你还是会得到的! 说到,我尝试了同样的方法:undefinedreturn 'A';undefined

_.compose()

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

这一次,您得到'hi MOE!'的值与预期的一样returnValue。你不会undefinedasync.compose().

我没有编写任何这些 compose 函数,但似乎两者之间的区别似乎是async.compose()不会返回任何值,而_.compose()会返回您return在最后执行的函数中传递的值。
但是,还有另一个区别:_.compose()不处理您在函数内部进行的任何异步调用。您只需在构成_.compose().

截至 2014 年 4 月 28 日,我可以看到的四个主要区别是

  • async.compose() 不返回
  • async.compose() 确实负责函数内的异步调用
  • _.compose() 确实返回一个值
  • _.compose() 不处理函数内的异步调用
于 2014-04-28T12:09:07.240 回答