所以我开始研究Ramda/Folktale。我在尝试映射来自目录的任务数组时遇到了问题。我试图解析文件内容。
var fs = require('fs');
var util = require('util');
var R = require('ramda');
var Task = require('data.task');
var compose = R.compose;
var map = R.map;
var chain = R.chain;
function parseFile(data) {
console.log("Name: " + data.match(/\$name:(.*)/)[1]);
console.log("Description: " + data.match(/\$description:(.*)/)[1]);
console.log("Example path: " + data.match(/\$example:(.*)/)[1]);
}
// String => Task [String]
function readDirectories(path) {
return new Task(function(reject, resolve) {
fs.readdir(path, function(err, files) {
err ? reject(err) : resolve(files);
})
})
}
// String => Task String
function readFile(file) {
return new Task(function(reject, resolve) {
fs.readFile('./src/less/' + file, 'utf8', function(err, data) {
err ? reject(err) : resolve(data);
})
})
}
var app = compose(chain(readFile), readDirectories);
app('./src/less').fork(
function(error) { throw error },
function(data) { util.log(data) }
);
我正在读取一个目录中的文件并返回一个任务。当这个任务被解决后,它应该进入readFile函数(返回一个新的任务)。一旦读取了文件,我希望它只解析其中的一些内容。
以下是代码:
var app = compose(chain(readFile), readDirectories);
它进入了readFile函数,但是'file'是一个文件数组,所以会出错。
使用以下代码:
var app = compose(chain(map(readFile)), readDirectories);
我们从未进入fs.readfile(),但'file'是实际的文件名。
我对此感到困惑,文档也令人费解。欢迎任何建议。
谢谢。
R.commute
在 ramda/ramda#1467 中更名为R.sequence
。我会更新我的答案。 - davidchambers