let getOeReport = async (req, res) => {
try {
let searchFormatForReason = {
"query": {
"reasonCode": null,
},
"fields": {
'reason': 1, '_id': 0
}
}
let result = await oeDao.getOeReport(searchFormat)
let resultReasons =
result.map(async res =>
res.sequences.map(inter =>
inter.interrupts.map((interrupts) => {
searchFormatForReason.query.reasonCode = interrupts.reason
reasonDao.getReasonByFields(searchFormatForReason)
})
)
)
console.log(resultReasons)
res.status(200).json({
status: "Success",
data: {
result: result
}
});
} catch (err) {
console.log(err)
res.status(400).json({
status: "Failure"
});
}
};
在上面的代码中,如果我试图控制resultons意味着我得到null。结果变量有嵌套的对象数组,这样,我需要'原因'值在序列数组内的中断数组,这是在结果数组内。我应该用那个值发出API请求我可以把它推入resultreons数组。请有人帮帮我……谢谢你
let resultReasons =
result.map(async res =>
res.sequences.map(inter =>
inter.interrupts.map((interrupts) => {
searchFormatForReason.query.reasonCode = interrupts.reason
reasonDao.getReasonByFields(searchFormatForReason)
})
)
)
在这段代码中,你使用的是async
,所以你必须接收Promise
,因为你没有在异步函数中使用await
,我看不出保留它的原因,但是你可以按照下面的代码添加一个await,应该解决这个问题(你已经在getOeReport
上使用async了,所以它将在没有任何修改的情况下工作)
let resultReasons =
await result.map(async res =>
res.sequences.map(inter =>
inter.interrupts.map((interrupts) => {
searchFormatForReason.query.reasonCode = interrupts.reason
reasonDao.getReasonByFields(searchFormatForReason)
})
)
)
但是你说你得到null,我不明白你是如何得到它的,这是因为你再次在第一个地图中使用async
函数,因此你必须得到Promise
,我看到你的变量可以为空的唯一方法是如果result
变量为空,但它应该触发一个异常,所以你的console.log将永远不会被执行