NodeJs:代码有时有效 - Async.map问题



我有一个配置json文件,如下所示。

"constraints": {
    "input": "input",
    "output": "output"
  }

我正在尝试读取此文件并创建带有子目录的inputoutput目录。

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函数以进行另一个操作。

问题:

  1. 谁能告诉我我编写代码流的方式是否有时会造成缺陷。
  2. 有没有更好的方法来编写相同的代码逻辑流。
  3. 我应该使用 async.map 来迭代文件,然后将其传递给读取异步

如果您依赖于在其他操作之前发生的异步操作,则必须异步处理它们!如前所述,您的代码似乎创建了一些目录(这将花费可测量的时间)并立即尝试使用它们,这不是犹太洁食。

您可以考虑如下内容:

async.series([
  function(){
    // create your directories here
  },
  function(){
    async.map(files,...)
  }
]);

这将保证在调用地图之前存在映射所需的资源。

最新更新