来自异步文档:
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()
如果可能的话,愿意摆脱两条额外的线条。 插入确认紧凑的“聪明”代码是反模式
更改async.waterfall([
async.apply(db.getSomeData, 'foo', 'bar'),
function(dbData, next) { // <==
async.map(dbData, bazParser, next);
} // <==
], callback);
,使其行为类似于“传递给返回函数的任何参数都预先到最初传递给应用的参数。”?
答案 0 :(得分:0)
我认为只有在项目中修改了异步核心时才能做到这一点。