javascript - 如何在 javascript(node.js) API 中映射嵌套数组?
问题描述
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"
});
}
};
在上面的代码中,如果我尝试控制 resultReasons 意味着我得到了空值。结果变量具有嵌套的对象数组,因此,我需要中断数组内的“原因”值,该数组位于序列数组内,并且位于结果数组内。我应该使用该值发出 API 请求,我可以将其推送到 resultReasons 数组中。请有人帮助我...谢谢
解决方案
let resultReasons =
result.map(async res =>
res.sequences.map(inter =>
inter.interrupts.map((interrupts) => {
searchFormatForReason.query.reasonCode = interrupts.reason
reasonDao.getReasonByFields(searchFormatForReason)
})
)
)
在您正在使用的这段代码中async
,您必须收到 a Promise
,因为您没有await
在该异步函数中使用,我看不出保留它的原因,但是您可以按照下面的代码添加一个 await并且应该解决问题(您已经在使用 async ongetOeReport
因此它无需任何修改即可工作)
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
在第一个地图中使用了一个函数,因此你必须得到 a Promise
,我看到你的变量可以为 null 的唯一方法是该result
变量为空,但它应该触发一个异常,所以你的 console.log 永远不会被执行
推荐阅读
- python - PySMB 连接但无法存储文件
- jquery - Jquery AJAX响应JSON解析
- verilog - 在 Verilog 中声明一个端口,其中一些位是输入,一些是输出
- kubernetes - 列出整个集群中所有正在运行的容器?
- javascript - 使用 reactjs 下载的 .zip 文件内容已损坏
- multithreading - Kotlin `?.let` 是线程安全的吗?
- react-native - 当我运行排毒测试时,我得到一个错误信息
- windows - 在 bash 脚本中找不到文件?
- groovy - 执行 Groovy 脚本以在 Nifi 中转换日期
- php - Laravel routes messed up