I hope the following code snippet is enough to explain my problem:
function getChildrensRoomsProductNumbers(uuids, callback) { var productNumbers = []; uuids.forEach(uuid => getProductNumber(uuid, function(productNumber){ productNumbers.push(productNumber);})) callback(productNumbers); }
So for an array of uuids, I’d like to request the corresponding product numbers from an online shop and store them in the array productNumbers
which then I’d like to pass to a parent function for further manipulation through calling callback(productNumbers)
The request itself is done in the getProductNumber
function.
However, I don’t understand why the array productNumbers
is empty? I know forEach
is not returning anything so that’s why I prepared an array beforehand that should be filled in my idea.
I’m relatively new to NodeJS/JavaScript, so I probably might be missing some basic concepts here.
This is the getProductNumber
function:
function getProductNumber(uuid, callback){ getToken(function(err, token){ var headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json', }; const options = { url: BASE_URL + 'api/product/' + uuid, method: 'GET', headers: headers }; axios.request(options) .then(res => { console.log("NUmber: " + res.data.data.productNumber); callback(res.data.data.productNumber); }) .catch(err => { console.error(err.response); }); }) }
Advertisement
Answer
please first learn async/await style to get rid of callbacks
then this will be doable :
async function getChildrensRoomsProductNumbers(uuids) { var productNumbers = []; for (let uuid of uuids) { const productNumber = await getProductNumber(uuid); productNumbers.push(productNumber); } return productNumbers; }
like people said in comments getProductNumber looks like it does an async job. if you wat to stick with callbacks you can use https://www.npmjs.com/package/async to fire a callback when your loop is done.