I have array of objects and I have to perform asynchronous operation on each element of array.But when I use Async.series() function,it is having some conflict in async call in between functions.Please suggest some operation through async.map() function.
function(cb){
var bookings = payload.bookings;
for(var i=0;i<bookings.length;i++){
var dataToSave = {};
//service choosen by customer
var service_id = bookings[i].serviceId;
dataToSave.serviceId = service_id;
var query = {
services : {$elemMatch : { serviceId : service_id } }
};
var projection = {
cellPhoneNumber :1,
countryCode:1,
services :1
};
var options = {};
Service.serviceProvider.getServiceProviders(query,projection,options,function(err,data){
if(err) {
cb(err);
} else {
if(data && data.length>0){
//getting list of SP which gives the service name given by customer
dataToSave.serviceProviderList = [];
for(var sp=0;sp<data.length;sp++){
var serviceProvider = {};
serviceProvider.id = data[sp]._id;
//searching in services array of one particular service id
for(var j=0;j<data[sp].services.length;j++){
if(data[sp].services[j].serviceId==service_id) {
serviceProvider.serviceRate = data[sp].services[j].rate;
break;
}
}
dataToSave.serviceProviderList.push(serviceProvider);
}
} else {
cb(ERROR.NO_SERVICE_PROVIDERS_FOUND);
}
console.log("dataToSave 1",dataToSave);
}
});
}
},
function(cb) {
cb();
}
Output:
dataToSave 2 { serviceId: '578e0da7c8c4cfc807040852' }
dataToSave 1 { serviceId: '578e0da7c8c4cfc807040852',
serviceProviderList:
[ { id: 578e18f6ed564791083c75ad, serviceRate: 200 },
{ id: 578e1996ed564791083c75b4, serviceRate: 200 } ] }
Expected Output :
dataToSave 1 { serviceId: '578e0da7c8c4cfc807040852',
serviceProviderList:
[ { id: 578e18f6ed564791083c75ad, serviceRate: 200 },
{ id: 578e1996ed564791083c75b4, serviceRate: 200 } ] }
dataToSave 1 { serviceId: '578e0da7c8c4cfc807040852',
serviceProviderList:
[ { id: 578e18f6ed564791083c75ad, serviceRate: 200 },
{ id: 578e1996ed564791083c75b4, serviceRate: 200 } ] }
Please suggest some operation using async.map()..so that I can perform each operation separately.