我如何控制node.js的异步特性以获得以下代码片段

我如何控制node.js的异步特性以获得以下代码片段,node.js,express,callback,synchronous,Node.js,Express,Callback,Synchronous,我们如何为下面的代码片段实现同步代码。我们将在前一个函数的回调函数中编写代码。这创造了地狱(正如他们所说)。我们如何能分别写男性和女性记录,并能同步执行。如何保留console.log(id[0])的值;在循环中。如果我走错了方向,请纠正我 var male_arr = []; var female_arr = []; /************* Fetching record from database with condition gender=0 ***************/

我们如何为下面的代码片段实现同步代码。我们将在前一个函数的回调函数中编写代码。这创造了地狱(正如他们所说)。我们如何能分别写男性和女性记录,并能同步执行。如何保留console.log(id[0])的值;在循环中。如果我走错了方向,请纠正我

var male_arr = []; var female_arr = [];

/*************   Fetching record from database with condition gender=0
***************/ user.find({gender: 0}, {_id: 1}, function (err_male, male) {

    if (err_male) {
        console.log(err_male);
    }

    male_arr = male;    // initializing males array
    looplength = male.length;
    //
    // With CAALBACK function, we have fetched records with condition gender = 1
    //
    user.find({gender: 1}, {_id: 1}, function (err_female, female) {
        if (err_female) {
            console.log(err_female);
        }

        female_arr = female;     // initializing females array

            // Populate the male array
            for (var loop = 0; loop < looplength; loop++) {

                var id = male_arr.splice(0, 1);
     //#1          /*****here is the spliced element********/

                console.log("Outside request api");
                console.log(id[0]);


                // Get all records of females which are in request table of male at id[0]
                request.find({male: id[0]._id}, {female: 1}, function (err, data) {
    //#2           /*****This value of male in id[0] is not retained for match ********/
                    console.log("Inside request api");
                    console.log(id[0]);
                    if (err) {
                        console.log(err);
                    }
                });

            }

    }); });
var male_arr=[];var女性_arr=[];
/*************正在从数据库中提取条件性别为0的记录
***************/find({gender:0},{u id:1},函数(err_-male,male){
如果(错误男性){
控制台日志(错误);
}
male_arr=male;//初始化males数组
looplength=阳螺纹长度;
//
//使用CAALBACK函数,我们获取了条件性别=1的记录
//
find({gender:1},{u id:1},函数(err_-female,female){
如果(错误女性){
控制台日志(错误为女性);
}
雌性_arr=雌性;//初始化雌性数组
//填充阳性数组
for(var loop=0;loop
异步瀑布可能是您问题的答案


异步瀑布可能是解决您问题的答案


尽管Caio的答案可能适合你的问题,但我是否可以建议使用承诺

使用,您可以执行以下操作:

注意:这是一个示例,它可能实际上不起作用


虽然Caio的答案可能适合你的问题,但我是否可以建议使用承诺

使用,您可以执行以下操作:

注意:这是一个示例,它可能实际上不起作用

var Promise = require('bluebird');

var getMaleFn() {
    return new Promise(function(resolve, reject){
        // Make the call to your API.
        // Handle errors, if any, return reject(err);
        return resolve(males);
    });
}

var getFemaleFn() {
    return new Promise(function(resolve, reject){
        // Make the call to your API.
        // Handle errors, if any, return reject(err);
        return resolve(females);
    });
}

var males = [];
var females = [];

// Fetch all males
getMaleFn()
    //Iterate each male and put it in the array
    .map(function(male) {
        males.push(male);
    })
    // Fetch all females
    .then(function(){
        return getFemaleFn()
    })
    //Iterate each females and put it in the array
    .map(function(female) {
        females.push(female);
    })
    .then(function(){
        console.log('done!');
    });