Проблема в том, как вы используете async-await
.Он находится внутри Array.prototype.map
, что делает функцию .map
асинхронной, и поэтому основной поток никогда не ждет завершения цикла и перехода к следующему оператору и возвращает data
, что составляет просто {}
.
try {
const array = ["brunch", "lunch", "crunch"]
const data = {};
// here's the issue async is callback function to map, due to which never waited for map function to finished.
array.map( async(d) => {
const venue = await Venue.find({ "category": { "$in": [d] }})
data[d] = venue;
});
return data;
} catch(err) {
throw err
}
Измените код на это:
(async function () {
try {
const array = ["brunch", "lunch", "crunch"]
const data = {};
array.map( d => {
const venue = await Venue.find({ "category": { "$in": [d] }})
data[d] = venue;
});
return data;
}
catch(err) {
throw err
}
})();
То, что вы сделали, похоже на это
function main () {
return new Promise ( resolve => {
setTimeout( () => {
console.log("First");
resolve(true);
},5000 );
});
}
(async function () {
await main();
console.log("Second")
})();
console.log("Third");
// Third
// First
// Second