2015-04-01 52 views
0

我为我的项目使用了异步模块。这是我在文件1如何在nodeJs中返回异步功能的结果(异步模块)

exports.check = function(option){ 
    var object = {}; 
    async.parallel([ 
     function(callback){ 
      if(!option.one){callback(null, true);}else{ callback(null, false);} 
     }, 
     function(callback){ 
      if(!option.two){callback(null, true);}else{ callback(null, false);} 
     }, 
     function(callback){ 
      if(!option.three){callback(null, true);}else{ callback(null, false);} 
     } 
    ], 
    function(err, results){ 
     if(results[0] && results[1] && results[2]){ 
      object.one = results[0]; 
      object.two = results[1]; 
      object.three = results[2]; 
      object.total = true; 

     }else{ 
      object.one = results[0]; 
      object.two = results[1]; 
      object.three = results[2]; 
      object.total = false; 

     } 
    }) 
    return object; 
} 

代码,这是在文件2的代码,我在文件1使用功能:

var isexit = db.check(option); 
    console.log(isexit); 

的一个问题是控制台“未定义”。 如果我在文件中更改代码1是线(返回对象):

exports.check = function(option){ 
    var object = {}; 
    async.parallel([ 
     function(callback){ 
      if(!option.one){callback(null, true);}else{ callback(null, false);} 
     }, 
     function(callback){ 
      if(!option.two){callback(null, true);}else{ callback(null, false);} 
     }, 
     function(callback){ 
      if(!option.three){callback(null, true);}else{ callback(null, false);} 
     } 
    ], 
    function(err, results){ 
     if(results[0] && results[1] && results[2]){ 
      object.one = results[0]; 
      object.two = results[1]; 
      object.three = results[2]; 
      object.total = true; 

     }else{ 
      object.one = results[0]; 
      object.two = results[1]; 
      object.three = results[2]; 
      object.total = false; 

     } 
     return object; 
    }) 

} 

就会报错。那么如何在文件1中返回一个函数结果。请帮助。非常感谢!

回答

2

你不能只是回到它,你必须为你的函数提供一个回调:

exports.check = function(option, callback){ 
    async.parallel([ 
    //... 
    ], function(err, results){ 
    var object = {}; 
    //... 
    callback(err, object); 
    }); 
} 

那么您的通话将看起来像:

db.check(option, function(isexit){ 
    console.log(isexit); 
}); 
+0

谢谢你的帮助!因为我想检查以调用另一个函数。我有很多功能。所以当我想检查不同的功能时,我必须调用检查功能。 所以你能否建议我解决这个问题?使用返回。当我不使用异步。谢谢! – Hudo 2015-04-01 09:52:28