使用async.parallel时出错

时间:2015-04-06 08:44:52

标签: javascript node.js fs async.js

我在node.js中使用async时遇到绑定错误有问题的代码:

var async = require('async');
var fs = require('fs');
var path = require('path');

function ignoreWhiteSpaceJudge(outDesired, outGenerated){

var contentOutDesired = "";
var contentOutGenerated = "";

async.parallel([

    function(outDesired, callback) {
           console.log(outDesired);

          fs.readFile(outDesired, 'utf8',function(error, data) {
                 if (error) {            
                      return callback(error);
                 } else {
                       contentOutDesired = data;
                      return callback();
                 }       
          });
    },

    function(outGenerated, callback) {

          fs.readFile(outGenerated, 'utf8', function(error, data) {
                 if (error) {            
                      return callback(error);
                 } else {
                       ontentOutGenerated = data;
                       return callback();
                 }       
          });
    }],

    function(error){
        if(error){
            console.log(error);
        }
        else{
            console.log(contentOutDesired);
            console.log(ontentOutGenerated);
        }

    });
 }


var pathToOutDesired = path.normalize('/home/repos/gabbar/testcases/outputs/output_1_1.out');
var pathToOutGenerated = path.normalize('/home/repos/gabbar/testcases/outputs/output_1_2.out');

ignoreWhiteSpaceJudge(pathToOutDesired, pathToOutGenerated);

我得到的错误如下:

 [Function]

 fs.js:423
    binding.open(pathModule._makeLong(path),
            ^
 TypeError: path must be a string
       at Object.fs.open (fs.js:423:11)
       at Object.fs.readFile (fs.js:206:6)
       at async.parallel.fs.readFile.ontentOutGenerated          (/home/repos/gabbar/validation/ignoreWhiteSpaceJudge.js:17:18)
at /home/repos/gabbar/node_modules/async/lib/async.js:570:21
at /home/repos/gabbar/node_modules/async/lib/async.js:249:17
at /home/repos/gabbar/node_modules/async/lib/async.js:125:13
at Array.forEach (native)
at _each (/home/repos/gabbar/node_modules/async/lib/async.js:46:24)
at async.each (/home/repos/gabbar/node_modules/async/lib/async.js:124:9)
at _asyncMap (/home/repos/gabbar/node_modules/async/lib/async.js:248:13)

我对node.js比较陌生,并且第一次尝试使用async模块。在这方面有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您使用parallel的回调函数覆盖路径。

只需从函数中删除第一个参数,即回调而不是数据:

function(callback) {
       console.log(outDesired);

      fs.readFile(outDesired, 'utf8',function(error, data) {
             if (error) {            
                  return callback(error);
             } else {
                   contentOutDesired = data;
                  return callback();
             }       
      });
},

function(callback) {

      fs.readFile(outGenerated, 'utf8', function(error, data) {
             if (error) {            
                  return callback(error);
             } else {
                   ontentOutGenerated = data;
                   return callback();
             }       
      });
}