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

时间:2015-04-16 21:55:48

标签: javascript node.js

我有一个配置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文件传递给create函数,该函数在其操作后返回一个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迭代文件然后将其传递给 readAsync

1 个答案:

答案 0 :(得分:1)

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

您可能会考虑以下内容:

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

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