Reputation: 501
i want to execute the last console statement
after all the for loop
execution, but that console statement executes immediately
when control enters else
statement, please help me to solve this issue
if (false) {
//
} else {
//pushing the scenarios object id from project table to scenarios array
// function async(project) {
// Promise((resolve, reject) => {
for (i = 0; i < projectToBeDeleted[0].scenarios.length; i++) {
scenarios.push(projectToBeDeleted[0].scenarios[i])
}
//iterating the scenario table to get the child scenarios from all matching scenarios
for (i = 0; i < scenarios.length; i++) {
query = { "_id": scenarios[i] }
Scenario.getScenarios(query)
.then((scenariosResponse) => {
for (j = 0; j < scenariosResponse[0].childScenario.length; j++) {
scenarios.push(scenariosResponse[0].childScenario[j])
}
})
.catch((error) => {
res.status(400).send({
message: error.stack
})
})
}
// })
console.log("sync", scenarios)
}
Upvotes: 0
Views: 33
Reputation: 166
You might want to use Promise.all([]).then()
.
See the docs.
EDIT: example with your specific problem
for (i = 0; i < projectToBeDeleted[0].scenarios.length; i++) {
scenarios.push(projectToBeDeleted[0].scenarios[i]);
}
const promises = [];
for (i = 0; i < scenarios.length; i++) {
const query = { "_id": scenarios[i] }
const promise = Scenario.getScenarios(query)
.then((scenariosResponse) => {
for (j = 0; j < scenariosResponse[0].childScenario.length; j++) {
scenarios.push(scenariosResponse[0].childScenario[j])
}
})
.catch((error) => {
res.status(400)
.send({
message: error.stack
})
})
promises.push(promise);
}
Promise.all(promises).then(() => {
console.log("sync", scenarios)
})
Upvotes: 2