我们正在与Outlook api集成,我们需要将恢复的电子邮件中的附件分组:
我们正在尝试这种方式:
const result = await client
.api('/me/messages')
.filter(searchMailFrom)
.select('subject, from, receivedDateTime, sentDateTime, isRead, toRecipients, hasAttachments')
.get()
let dadosAnexo = result.value.map(async item => {
if (item.hasAttachments) {
const resultAtt = await client
.api('/me/messages/' + item.id + '/attachments')
.get()
item.anexos = resultAtt.value
}
})
await Promise.all(dadosAnexo)
return res.status(200).send(result.value)
但是当我们放入Promise.all()时,系统只是不返回任何内容
答案 0 :(得分:0)
您不会从.map
函数内部返回任何内容。因此,dadosAnexo
变成了Promise
的数组,每个数组都解析为undefined
。
请查看MDN文档以获取有关.map
的工作方式的更多详细信息: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)