两者似乎都在做同样的事情,即计算f(g(h(x)))
,当被调用时async.compose
(f, g, h)
或_.compose
(f, g, h)
。
这两个电话之间有什么区别吗?
答案 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日我可以看到的四个主要差异是: