You've said that db.collection(...).remove(...) doesn't return a promise, but that you'll try one. Once you do:
forEach doesn't do anything with the return value of the callback, so it won't do anything to wait for the promises created by your async callback to settle.
Instead, to run them in parallel, use map and Promise.all:
await Promise.all(mobile_numbers.map(number => {
return /*...create a promise for the remove operation here...*/;
}));
Example:
const removeNumber = number => new Promise(resolve => {
console.log(`Removing ${number}...`);
setTimeout(() => {
console.log(`${number} removed`);
resolve();
}, Math.random() * 500);
});
async function deletor(mobile_numbers) {
await Promise.all(mobile_numbers.map(number => {
return removeNumber(number);
}));
}
deletor(["111", "222", "333", "444", "555"])
.then(() => { console.log("Done"); })
.catch(err => { console.error("Error:", err); });
To run them in series, you can use the "Promise reduce" trick:
await mobile_numbers.reduce((p, number) => {
return p.then(() => {
return /*...create a promise for the remove operation here...*/
});
}, Promise.resolve());
Example:
const removeNumber = number => new Promise(resolve => {
console.log(`Removing ${number}...`);
setTimeout(() => {
console.log(`${number} removed`);
resolve();
}, Math.random() * 200);
});
async function deletor(mobile_numbers) {
await mobile_numbers.reduce((p, number) => {
return p.then(() => {
return removeNumber(number);
});
}, Promise.resolve());
}
deletor(["111", "222", "333", "444", "555"])
.then(() => { console.log("Done"); })
.catch(err => { console.error("Error:", err); });