2015-04-01 85 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