I am trying to run a callback function inside a for loop, but I am finding issues in executing the callback function. Seems like the function gets executed after the for loop is completed. For example if for loop has 2 iteration, then the function is executed only after the two for loop iteration is executed. Hence the execution of function is always done after the last iteration of for for loop. I am trying it really hard and have spend almost a day today looking at examples and have finally have used the closures as per the example provided in example in below link but still not getting the accurate result.
https://www.geekabyte.io/2013/04/callback-functions-in-loops-in.html
Below is the code that I am using :
let promoList = [];
for(i = 0; i< availablePromoCount; i++){
promoObj = {};
promoObj.maxUsesUser = getAvailablePromoResults[i].MaxUsesUser //getAvailablePromoResults is a list coming from another function not shown here
promoObj.promoCode = getAvailablePromoResults[i].PromoCode; // available promo code for this iteration
promoList.push(promoObj);
(function(clsn){
searchUserUsedPromo(userId, promoList[clsn].promoCode, (error, searchUserUsedPromoResults) => {
if (error) {
console.log(error);
return res.status(500).json({
success: 0,
message: "Some other error",
error: error,
});
}
cosnole.log("Iteration of function is ", clsn); // always iteration is last iteration and displays same and last iteration of i
console.log("Searched promo code is ", promoList[clsn].promoCode);
timesUsed = searchUserUsedPromoResults.length;
console.log("Times Used", timesUsed);
console.log("Max uses user", promoList[i].maxUsesUser);
});
})(i)
count++;
if(getAvailablePromoResults.length == count){
return res.status(200).json({
success: 1,
availablePromoList: availablePromoList,
});
}
}