我有一个配置json文件,如下所示。
"constraints": {
"input": "input",
"output": "output"
}
我正在尝试读取此文件并创建带有子目录的input
和output
目录。
var fs = require("fs");
var async = require("async");
var node_xj = require("xls-to-json");
var cf= JSON.parse(fs.readFileSync("config.json", 'utf8'));
// Declare variables
var files = [];
function readAsync(file, callback) {
node_xj(file, callback);
}
function create(currentDirPath, outputDirPath, callback) {
// some code creating directories
}
create(cf.lang.input, cf.lang.output, function(stat, config) {
files.push(config);
});
async.map(files, readAsync, function(err, results) {
if(err) throw err;
});
代码工作正常,但有时不能。让我演练一下代码。我正在加载一些模块。
var fs = require("fs");
var async = require("async");
var node_xj = require("xls-to-json");
我正在加载配置文件。
var cf= JSON.parse(fs.readFileSync("config.json", 'utf8'));
然后我传递 cf 文件来创建函数,该函数在其操作后返回一个object
,我将其推送到array
中。
var files = [];
function readAsync(file, callback) {
node_xj(file, callback);
}
function create(input, output, callback) {
// some code creating directories and object
}
create(cf.lang.input, cf.lang.output, function(stat, config) {
files.push(config);
});
async.map(files, readAsync, function(err, results) {
if(err) throw err;
});
然后我将 files 数组传递给我的 async.map
函数,该函数将其传递给readAsync
函数以进行另一个操作。
问题:
- 谁能告诉我我编写代码流的方式是否有时会造成缺陷。
- 有没有更好的方法来编写相同的代码逻辑流。
- 我应该使用 async.map 来迭代文件,然后将其传递给读取异步
如果您依赖于在其他操作之前发生的异步操作,则必须异步处理它们!如前所述,您的代码似乎创建了一些目录(这将花费可测量的时间)并立即尝试使用它们,这不是犹太洁食。
您可以考虑如下内容:
async.series([
function(){
// create your directories here
},
function(){
async.map(files,...)
}
]);
这将保证在调用地图之前存在映射所需的资源。