I am trying to return a random value from a list of numbers stored in a csv file. However, when trying to parse the csv and set a value a promise is returned instead of a value.
const fs = require('fs')
async function getRemainingItem() {
await fs.readFileSync('remaining-items.csv', 'utf8', (err, data) => {
if (err) {}
let linesExceptFirst = data.split('\n').slice(1)
let num = Math.floor(Math.random() * linesExceptFirst.length)
let linesArr = linesExceptFirst.map(line=>line.split(','))
return linesArr[num][0]
});
}
let item = getRemainingItem()
console.log(item)
How can I return a random number from a csv that contains a list of numbers?
You are using the readFileSync
method, which await
is not needed with.
const fs = require('fs')
function getRemainingItem() {
const data = fs.readFileSync('remaining-items.csv', 'utf8');
const linesExceptFirst = data.split('\n').slice(1);
const num = Math.floor(Math.random() * linesExceptFirst.length);
const linesArr = linesExceptFirst.map(line=>line.split(','));
return linesArr[num][0];
}
const item = getRemainingItem();
console.log(item);
If you want the file to be read asynchronously and not block the execution process, then this can be done like this:
const fs = require('fs');
const fsp = fs.promises;
async function getRemainingItem() {
const data = await fsp.readFile('remaining-items.csv', 'utf8');
const linesExceptFirst = data.split('\n').slice(1);
const num = Math.floor(Math.random() * linesExceptFirst.length);
const linesArr = linesExceptFirst.map(line=>line.split(','));
return linesArr[num][0];
}
async function main() {
const item = await getRemainingItem();
console.log(item);
}
main();