可以在async.apply中反转参数顺序吗?

时间:2016-01-22 15:48:33

标签: javascript node.js

来自异步文档:

  

apply(function,arguments ..)

     

创建一个已经应用了一些参数的延续函数。

     

与其他控制流功能结合使用时的简写。传递给返回函数的任何参数都会添加到最初传递给apply的参数中。

...以及传递参数的示例:

node> var fn = async.apply(sys.puts, 'one');
node> fn('two', 'three');
one
two
three

我想做这样的事情:

async.waterfall([
    async.apply(db.getSomeData, 'foo', 'bar'),
    async.apply(async.map, bazParser)
], callback);

但是,因为async.map()的方法签名是(arr, iterator, [callback])bazParser成为传递给async.map()的第一个参数,而不是{{1}返回的预期数据}}

我总是记得这一点,告诉自己db.getSomeData()将“我的东西首先”添加到参数列表中,但有没有办法扭转这种情况,以便返回的数据传递 - 首先,接着是我传递给async.apply()的所有参数?

现在我能做到这一点的唯一方法是:

async.apply()

如果可能的话,愿意摆脱两条额外的线条。 插入确认紧凑的“聪明”代码是反模式

TL;博士

更改async.waterfall([ async.apply(db.getSomeData, 'foo', 'bar'), function(dbData, next) { // <== async.map(dbData, bazParser, next); } // <== ], callback); ,使其行为类似于“传递给返回函数的任何参数都预先到最初传递给应用的参数。”?

1 个答案:

答案 0 :(得分:0)

我认为只有在项目中修改了异步核心时才能做到这一点。