async.waterfall里面的async.apply

我有以下的代码片段

async.waterfall([ // Read directory async.apply(fs.readdir, '../testdata'), // Load data from each file function(files, callback) { async.each(files, loadDataFromFile, callback); } ], function(err) { if (err) { api.logger.error('Error while inserting test data', err); } next(); }); 

有没有办法可以取代这件作品:

 function(files, callback) { async.each(files, loadDataFromFile, callback); } 

只是一个function? 就像我上面做的,使用async.apply()我取代了这个:

 function(callback) { fs.readdir('../testdata', callback); } 

我知道我可以创build自己的帮助函数来做到这一点,或者我可以这样做,但我想知道是否有一种方法可以使用像.bind().apply()这样的函数。

我想过使用.bind()然后.apply()但这会导致function(loadDataFromFile, files, callback) ,这是不正确的。

我想知道是否有一种方法可以使用像.bind()或.apply()这样的函数。

不只使用原生函数,或者只使用原生函数。 正如你已经注意到,人们需要flip eachfunction。 部分应用程序的某些实现(如Underscore)允许中间参数,但是您需要明确地包含它们。

lodash的partialRight权限的partialRight

 async.waterfall([ _.partial(fs.readdir, '../testdata'), // Read directory _.partialRight(async.each, loadDataFromFile), // Load data from each file ], function(err) { if (err) api.logger.error('Error while inserting test data', err); next(); }); 

可能你需要把这个方法bind到正确的上下文,就像fs.readdir.bind(fs, '../testdata')