I'm making a simple Redis'
request which is supposed to return all VALUES (not keys) in my database. The problem is that my function returns tab
before the .forEach
even starts. Why do I know that? My console.log(tab)
's result is printed before console.log(cards)
for each iteration.
My interpreter also tells me inside the .forEach
function that "Promise returned from forEach argument is ignored"
.
What have I done wrong there? Why isn't async/await working inside .forEach
?
router.get("/", async (req, res) => {
try {
const keys = await client.keys("*")
//console.log(result)
const tab = []
await keys.forEach(async (key) => {
const cards = await client.smembers(key)
console.log(cards)
tab.push(cards)
})
console.log(tab)
return res.send(tab)
} catch (err) {
console.error(err)
}
});
I'm making a simple Redis'
request which is supposed to return all VALUES (not keys) in my database. The problem is that my function returns tab
before the .forEach
even starts. Why do I know that? My console.log(tab)
's result is printed before console.log(cards)
for each iteration.
My interpreter also tells me inside the .forEach
function that "Promise returned from forEach argument is ignored"
.
What have I done wrong there? Why isn't async/await working inside .forEach
?
router.get("/", async (req, res) => {
try {
const keys = await client.keys("*")
//console.log(result)
const tab = []
await keys.forEach(async (key) => {
const cards = await client.smembers(key)
console.log(cards)
tab.push(cards)
})
console.log(tab)
return res.send(tab)
} catch (err) {
console.error(err)
}
});
forEach
doesn't return a promise which is why you're getting that warning.
– Andy
Commented
Nov 3, 2021 at 17:31
map
or reduce
. Maybe create an array of promises and await Promise.all
instead.
– Andy
Commented
Nov 3, 2021 at 20:20
forEach
is not meant to work with async functions. You can use a for ... of
loop instead.
for(const key of keys){
const cards = await client.smembers(key)
console.log(cards)
tab.push(cards)
}