【问题标题】:How to map nested array in javascript(node.js) API?如何在 javascript(node.js) API 中映射嵌套数组?
【发布时间】:2021-02-10 04:44:56
【问题描述】:
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"
        });
    }
};

在上面的代码中,如果我尝试控制台结果Reasons 意味着我得到空值。结果变量具有嵌套的对象数组,因此,我需要中断数组内的“原因”值,该数组位于序列数组内,并且位于结果数组内。我应该使用该值发出 API 请求,我可以将其推送到 resultReasons 数组中。请有人帮助我...谢谢

【问题讨论】:

    标签: javascript node.js ecmascript-6 map-function


    【解决方案1】:
    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,我看不出保留它的原因,但是,您可以按照下面的代码添加等待并解决问题(您已经在 getOeReport 上使用异步,因此它无需任何修改即可工作

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

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 2019-08-13
      • 2020-02-22
      • 2022-01-18
      相关资源
      最近更新 更多