我如何控制node.js的异步特性以获得以下代码片段
我们如何为下面的代码片段实现同步代码。我们将在前一个函数的回调函数中编写代码。这创造了地狱(正如他们所说)。我们如何能分别写男性和女性记录,并能同步执行。如何保留console.log(id[0])的值;在循环中。如果我走错了方向,请纠正我我如何控制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 ***************/
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!');
});