【问题标题】:What is the difference between the async.compose function and underscore.compose function?async.compose 函数和 underscore.compose 函数有什么区别?
【发布时间】:2016-12-31 21:55:17
【问题描述】:

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

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

【问题讨论】:

    标签: javascript underscore.js async.js


    【解决方案1】:

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

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

    【讨论】:

    • 那么在哪些场景下首选哪一个?
    • @ChintanPathak:您需要了解async 的含义。
    【解决方案2】:

    我遇到了同样的情况,我需要从某个库获得的一个函数来使用来自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 日,我看到的四个主要区别是:

    • async.compose()不返回值
    • async.compose() 确实负责函数内的异步调用
    • _.compose() 确实返回一个值
    • _.compose()不处理函数内的异步调用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2021-10-24
      • 2019-01-25
      • 2010-12-14
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多