I want for forEach function to complete before returning results, how do you do this? The function returns null in all results when I return code because it doesn't wait for forEach to end, so how do i solve this?
async function fileResult(fileCard, userId, req, fileTypes) {
if (req.files && Object.keys(req.files).length) {
let resultObj = {
smallResult: null,
mediumResult: null,
largeResult: null,
thumbnailResult: null,
};
const result = fileTypes.forEach(async (fileType) => {
if (req.files[fileType]) {
try {
const fileUploadResult = await uploadFile(fileCard, userId, req, fileType);
if (fileType === 'small') {
resultObj['smallResult'] = fileUploadResult;
} else if (fileType === 'medium') {
resultObj['mediumResult'] = fileUploadResult;
} else if (fileType === 'large') {
resultObj['largeResult'] = fileUploadResult;
} else if (fileType === 'thumbnail') {
resultObj['thumbnailResult'] = fileUploadResult;
}
if (!fileUploadResult.success) {
console.log(fileUploadResult.error, 500);
return;
}
// console.log(resultObj);
} catch (err) {
console.log(err);
}
}
});
return resultObj;
}
}
Try this out
async function fileResult(fileCard, userId, req, fileTypes) {
if (req.files && Object.keys(req.files).length) {
let resultObj = {
smallResult: null,
mediumResult: null,
largeResult: null,
thumbnailResult: null,
};
await new Promise((resolve, reject) => {
const result = fileTypes.forEach(async (fileType) => {
if (req.files[fileType]) {
try {
const fileUploadResult = await uploadFile(fileCard, userId, req, fileType);
if (fileType === 'small') {
resultObj['smallResult'] = fileUploadResult;
} else if (fileType === 'medium') {
resultObj['mediumResult'] = fileUploadResult;
} else if (fileType === 'large') {
resultObj['largeResult'] = fileUploadResult;
} else if (fileType === 'thumbnail') {
resultObj['thumbnailResult'] = fileUploadResult;
}
if (!fileUploadResult.success) {
console.log(fileUploadResult.error, 500);
resolve("done")
return;
}
// console.log(resultObj);
} catch (err) {
console.log(err);
reject(err)
}
}
});
})
return resultObj;
}
}
Kindly accept it as answer if it works for you, thanks!