【发布时间】:2016-12-31 21:55:17
【问题描述】:
两者似乎都在做同样的事情,即计算f(g(h(x))),当这样调用async.compose(f, g, h) 或_.compose(f, g, h)。
这两个电话有什么区别吗?
【问题讨论】:
标签: javascript underscore.js async.js
两者似乎都在做同样的事情,即计算f(g(h(x))),当这样调用async.compose(f, g, h) 或_.compose(f, g, h)。
这两个电话有什么区别吗?
【问题讨论】:
标签: javascript underscore.js async.js
顾名思义,async.compose 组成异步函数。
它通过回调参数获取结果,而不是返回值。
【讨论】:
async 的含义。
我遇到了同样的情况,我需要从某个库获得的一个函数来使用来自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 的值一样。你不会像async.compose() 那样得到undefined。
我没有编写任何这些 compose 函数,但似乎两者之间的区别似乎是 async.compose() 不会返回任何值,而 _.compose() 将返回您传递给 return 的值最后执行函数。
但是,还有另一个区别:_.compose() 不处理您在函数内部进行的任何异步调用。您只需在构成 _.compose() 的所有函数中编写同步代码。
截至 2014 年 4 月 28 日,我看到的四个主要区别是:
【讨论】: