Вы ничего не возвращаете изнутри ваших .map
функций.Таким образом, dadosAnexo
становится массивом Promise
с, каждый из которых будет преобразован в undefined
.
Проверьте документы MDN для получения дополнительной информации о том, как .map
работает: Карта |MDN .
Затем вы передаете dadosAnexo
на ваш Promise.all
вызов.
Но когда мы ставим Promise.all (), системапросто ничего не возвращает
Здесь ваше предположение неверно.
await Promise.all(dadosAnexo)
Вышеуказанный вызов await Promise.all
фактически вернет массив undefined
.Потому что вы передаете его dadosAnexo
(массив Promise
с, каждый из которых преобразуется в undefined
).Кроме того, вы не присваиваете возвращаемое значение какой-либо переменной (поэтому вы на самом деле не знаете, возвращает ли она что-то или нет).
Проверьте документы MDN для получения более подробной информации о том, как Promise.all
работы: Promise.all () |MDN
Теперь, чтобы решить вашу проблему, вот решение:
const result = await client
.api('/me/messages')
.filter(searchMailFrom)
.select('subject, from, receivedDateTime, sentDateTime, isRead, toRecipients, hasAttachments')
.get()
// promisesToAttach will be an array containing some Promises and some item values
const promisesToAttach = result.value.map(item => {
if (item.hasAttachments) {
// returning a promise
return client
.api('/me/messages/' + item.id + '/attachments')
.get()
.then(resultAtt => {
item.anexos = resultAtt.value
return item
})
}
// returning an item value
return item
})
// resultWithAttachments will be an array of resolved item values
const resultWithAttachments = await Promise.all(promisesToAttach)
return res.status(200).send(resultWithAttachments)