dmikester1
dmikester12y ago

✅ – dmikester1 – 16-27 Oct 12

Once again, here I am struggling with async/await and promises. I have a Node endpoint that ran a bunch of code to read some files from a directory and do some processing and it was all working just fine. Then I realized I needed to abstract that code out so I could call it from multiple places. And now I cannot get a result back from that endpoint. I know it has to do with how I am handling the promises.
19 Replies
dmikester1
dmikester12y ago
Here is the endpoint code:
router.get('/getMisfitCount', async (req, res) => {
console.log('getting misfit count...');
let misfitCountData = null;
try {
misfitCountData = await getMisfitCount();
console.log({ misfitCountData });
} catch (e) {
console.log({ e });
}
res.send(misfitCountData);
});
router.get('/getMisfitCount', async (req, res) => {
console.log('getting misfit count...');
let misfitCountData = null;
try {
misfitCountData = await getMisfitCount();
console.log({ misfitCountData });
} catch (e) {
console.log({ e });
}
res.send(misfitCountData);
});
and here is getMisfitCount():
const getMisfitCount = () => {
const misfitsFolder = process.env.MISFITS_FOLDER;

const EXTENSION = '.json';
fs.promises.readdir(misfitsFolder)
.then((files) => {
const targetFiles = files.filter((file) => {
return path.extname(file).toLowerCase() === EXTENSION;
});
let misfitReasons = {};
targetFiles.forEach((file, index) => {
const rawdata = fs.readFileSync(misfitsFolder + '/' + file);
const misfitData = JSON.parse(rawdata);
// some more logic/processing here
console.log('sending back results');
return { count: 5, misfitResultsMsg: 'hi there' };
})
.catch((e) => {
console.log({ e });
return { count: 0, misfitResultsMsg: '' };
});
};
const getMisfitCount = () => {
const misfitsFolder = process.env.MISFITS_FOLDER;

const EXTENSION = '.json';
fs.promises.readdir(misfitsFolder)
.then((files) => {
const targetFiles = files.filter((file) => {
return path.extname(file).toLowerCase() === EXTENSION;
});
let misfitReasons = {};
targetFiles.forEach((file, index) => {
const rawdata = fs.readFileSync(misfitsFolder + '/' + file);
const misfitData = JSON.parse(rawdata);
// some more logic/processing here
console.log('sending back results');
return { count: 5, misfitResultsMsg: 'hi there' };
})
.catch((e) => {
console.log({ e });
return { count: 0, misfitResultsMsg: '' };
});
};
when I log out misfitCountData in the endpoint, it is undefined and gets output before I see sending back:...
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
dmikester1
dmikester12y ago
targetFiles gets used a few lines down: targetFiles.forEach((file, index) => {
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
dmikester1
dmikester12y ago
I understand that. I am not accessing targetFiles outside the function.
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
dmikester1
dmikester12y ago
that }); is closing the files.filter block
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
dmikester1
dmikester12y ago
yeah, sorry about that
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
dmikester1
dmikester12y ago
shoot, i deleted my return when i was cleaning up my code
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
dmikester1
dmikester12y ago
i edited the function to show my return i see 'sending back results' after i see 'getting misfit count...'
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
dmikester1
dmikester12y ago
ohhh, so you are saying i need to do return fs.promises.readdir(misfitsFolder)....