我有以下代码片段
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);
}
只是一个功能?就像我上面所做的那样,使用async.apply()
我替换了这个:
function(callback) {
fs.readdir('../testdata', callback);
}
我知道我可以创建自己的辅助函数来执行此操作,或者我可以这样做,但我想知道是否有办法只使用.bind()
或.apply()
这样的函数
我考虑使用.bind()
然后使用.apply()
,但这会导致function(loadDataFromFile, files, callback)
不正常。
答案 0 :(得分:5)
我想知道是否有办法只使用.bind()或.apply()这样的函数。
不仅使用本机功能,或仅使用来自async
的功能。您已经注意到,需要flip
each
函数。部分应用程序的某些实现(如Underscore)允许使用中间参数,但您需要明确包含它们。
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')
。