这个使用Ramda.js的javascript代码看起来不错吗?

时间:2015-10-02 15:53:56

标签: javascript functional-programming ramda.js

此代码有效,但我不知道它是否正常以及是否正确使用了ramda.js。它看起来功能和可读性?

我也使用Q作为承诺。

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
        );
    }

非常感谢。

1 个答案:

答案 0 :(得分:2)

虽然我是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中仍有一些有用的清理工作,我不会感到惊讶。

正如我所说,这些都没有经过测试。