如何在nodeJs中返回异步函数(async模块)的结果

时间:2015-04-01 09:17:34

标签: node.js asynchronous return

我为我的项目使用了异步模块。这是我在文件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;
}

这是文件2中的代码。我使用文件1中的函数:

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

问题是控制台是'undefined'。 如果我将文件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.请帮助。非常感谢!

1 个答案:

答案 0 :(得分:2)

您无法退回,您必须为您的功能提供回调:

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

然后你的电话会是:

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