Ваш метод Custom.find
- asynchronous
, поэтому, пока ваша функция asynchronous
работает для возврата promise
, остальная часть вашей функции вне функции работает как обычно, поэтому вы получаете пустой массив, код выполняется до того, как ваша функция asyn c завершится внутри l oop, чтобы получить массив со значениями за пределами l oop, чтобы ваше обещание возвращало значение, к которому вы можете получить доступ позже за пределами loop
let promise = new Promise(function(resolve, reject) {
arr = [];
for (let i = 0; i < req.body.length; i++) {
var finalvalue=Customer.find({
'_id': req.body[i]
}).then(documents => {
console.log("name", documents[0].name);
arr.push(documents[0])
return arr
});
}
resolve(finalvalue)
});
promise.then(
result => {
console.log(result);
}
)
вот рабочий пример
cutosm=(i)=>new Promise(r=>{
setTimeout(()=>{
r(i)
},300 +Math.random()*200)
})
async function smfunc(){
arr = [];
for (let i = 0; i < 8; i++) {
var finalvalue= await cutosm(i).then(e => {
arr.push(e)
return arr
});
}
return finalvalue
}
smfunc().then(r=>console.log(r))