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
each
function。 部分应用程序的某些实现(如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')
。