我有以下代码片段
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),这是不好的。
发布于 2014-03-28 14:08:03
我想知道是否有一种方法只使用像.bind()或.apply()这样的函数。
不是只使用本机函数,也不是只使用来自async的函数。正如您已经注意到的,需要flip each函数。部分应用程序的某些实现(如下划线)允许中间参数,但您需要显式地包含它们。
一个使用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')。
https://stackoverflow.com/questions/22714355
复制相似问题