首页 > 解决方案 > 如何在 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 数组中。请有人帮助我...谢谢

标签: javascriptnode.jsecmascript-6map-function

解决方案


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 永远不会被执行


推荐阅读