这个使用 Ramda.js 的 javascript 代码看起来没问题吗?
Is this javascript code that uses Ramda.js looks ok?
此代码有效,但我不知道它看起来是否正常以及 ramda.js 是否使用正确。它看起来实用且可读吗?
我也用Q来做promises。
readDir 读取目录中的所有文件,包括统计信息,
其他地方也用到了这个功能
你怎么看?
function readDir(p) {
return R.pipeP(
function() {
return fs.readdir(p);
},
R.map(function(file) {
return fs.stat(path.join(p, file))
.then(function(stats) {
return {
file: file,
stats: stats,
fullfilename: path.join(p, file)
};
})
.fail(function(err){
log.error(err);
});
}), Q.all
);
}
//delete last, filter using statistics
function deleteFilesExceptOne(folder) {
return R.pipeP(
function() {
return readDir(folder)();
},
R.filter(function(fl) {
return (fl.stats.isFile() && timespan.fromDates(fl.stats.mtime, new Date()).totalSeconds() > 120);
}),
R.tail,
R.map(function(fl) {
return fs.unlink(fl.fullfilename);
}),
Q.all
);
}
非常感谢。
虽然我是 Ramda 的作者之一,但我不怎么使用 pipeP
,更喜欢 Future
/Task
实现而不是 Promises
,所以我也许不是回答这个问题的最佳人选。但我肯定会建议这不是使用 Ramda 的最惯用的方式。这是您的第二个函数的完全未经测试的版本,其中包含几个辅助函数:
var isFile = function(file) {
return file.stats.isFile();
};
var olderThan = R.curry(function(seconds, file) {
return timespan.fromDates(file.stats.mtime, new Date()).totalSeconds() > seconds;
});
var deleteFilesExceptOne = R.pipeP(
readDir,
R.filter(R.both(isFile, olderThan(120))),
R.tail,
R.map(R.pipe(R.prop('fullfilename'), fs.unlink)),
Q.all
);
请特别注意此变化:
function deleteFilesExceptOne(folder) {
return R.pipeP(
function() {
return readDir(folder)();
},
//...
对此:
var deleteFilesExceptOne = R.pipeP(
readDir,
// ...
如果 olderThan
中仍有一些有用的清理工作需要完成,我不会感到惊讶。
正如我所说,none 已经过测试。
此代码有效,但我不知道它看起来是否正常以及 ramda.js 是否使用正确。它看起来实用且可读吗?
我也用Q来做promises。
readDir 读取目录中的所有文件,包括统计信息, 其他地方也用到了这个功能
你怎么看?
function readDir(p) {
return R.pipeP(
function() {
return fs.readdir(p);
},
R.map(function(file) {
return fs.stat(path.join(p, file))
.then(function(stats) {
return {
file: file,
stats: stats,
fullfilename: path.join(p, file)
};
})
.fail(function(err){
log.error(err);
});
}), Q.all
);
}
//delete last, filter using statistics
function deleteFilesExceptOne(folder) {
return R.pipeP(
function() {
return readDir(folder)();
},
R.filter(function(fl) {
return (fl.stats.isFile() && timespan.fromDates(fl.stats.mtime, new Date()).totalSeconds() > 120);
}),
R.tail,
R.map(function(fl) {
return fs.unlink(fl.fullfilename);
}),
Q.all
);
}
非常感谢。
虽然我是 Ramda 的作者之一,但我不怎么使用 pipeP
,更喜欢 Future
/Task
实现而不是 Promises
,所以我也许不是回答这个问题的最佳人选。但我肯定会建议这不是使用 Ramda 的最惯用的方式。这是您的第二个函数的完全未经测试的版本,其中包含几个辅助函数:
var isFile = function(file) {
return file.stats.isFile();
};
var olderThan = R.curry(function(seconds, file) {
return timespan.fromDates(file.stats.mtime, new Date()).totalSeconds() > seconds;
});
var deleteFilesExceptOne = R.pipeP(
readDir,
R.filter(R.both(isFile, olderThan(120))),
R.tail,
R.map(R.pipe(R.prop('fullfilename'), fs.unlink)),
Q.all
);
请特别注意此变化:
function deleteFilesExceptOne(folder) {
return R.pipeP(
function() {
return readDir(folder)();
},
//...
对此:
var deleteFilesExceptOne = R.pipeP(
readDir,
// ...
如果 olderThan
中仍有一些有用的清理工作需要完成,我不会感到惊讶。
正如我所说,none 已经过测试。