簡體   English   中英

Javascript 嵌套 map 迭代不更新我的對象的值

[英]Javascript Nested map iteration do not update my Object's Value

我對嵌套地圖有疑問。 我需要在 axios 響應之后更新數據,但我的值沒有傳遞到主容器這是我的代碼

        let abc = usr.map(updatedNode=> {
            JSON.parse(updatedNode.orderDetail).map(orderProduct=> {
                axios.get(appUrl +'productDetail/'+orderProduct.id)
                    .then(function (response) {
                        orderProduct.productTypes.map(opt => {
                            JSON.parse(response.data[0].productTypes).map(node => {
                                if(node.id == opt.id){
                                    delete opt['quantity']
                                    delete node['quantity']
                                    opt.quota = node.quota
                                }
                            }) 
                            return opt;
                        })
                    })
                    return orderProduct
                })
                return updatedNode
            })
           res.send(abc);

這段代碼應該更新配額數量,但是在外部的“updatedNode”中更新了我看不到更新的值我在哪里做錯了?

在下面編輯我的 usr.json;

[
{
id: "cbc9b288-36f5-4e45-a75a-9c75f9a8287c",
orderDetail: "[{"productTypes":[{"id":1,"productType":"S-M-LA","productTotalPrice":"35","quota":38,"productSubPiece":3,"value":5,"quantity":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8},{"value":9},{"value":10},{"value":11},{"value":12},{"value":13},{"value":14},{"value":15},{"value":16},{"value":17},{"value":18},{"value":19},{"value":20},{"value":21},{"value":22},{"value":23},{"value":24},{"value":25},{"value":26},{"value":27},{"value":28},{"value":29},{"value":30},{"value":31},{"value":32},{"value":33},{"value":34},{"value":35},{"value":36},{"value":37},{"value":38}]},{"id":2,"productType":"S-M","productTotalPrice":"75","quota":3,"productSubPiece":2,"value":"","quantity":[{"value":0},{"value":1},{"value":2},{"value":3}]}],"id":"productID","productName":"SONpR","productName_ru":"prSon","picture":"PICTURE"}]",
orderType: "PENDING",
userId: "8f9c623c-98ce-4904-a5b7-2d5fc68a7f5e",
createTime: "2020-07-16T18:30:42.000Z",
lastUpdate: "0000-00-00 00:00:00",
name: "NAME"
}
]

orderDetail 是字符串,所以我將其解析為 JSON 然后嘗試操縱日期

updatedNode 是 mongodb 結果集還是什么? 如果是,首先將其轉換為 JS object。

let obj = updatedNode.toObject();

比使用 obj 變量。

AFAIK,Array.map 不接受 Promise 這是現在正在發生的事情。 您可以組合所有 api 調用,等待它,然后使用 map 進行處理。

async function abc(usr) {
  const promises = []
  usr.forEach(updatedNode => {
    JSON.parse(updatedNode.orderDetail).forEach((orderProduct) => {
      promises.push(axiom.get(`${appUrl}productDetail/${orderProduct.id}`))
    })
  })
  const resArray = await Promise.all(promises)
  const abc = resArray.map(response => {
    orderProduct.productTypes.map(opt => {
      JSON.parse(response.data[0].productTypes).map(node => {
        if(node.id == opt.id){
          delete opt['quantity']
          delete node['quantity']
          opt.quota = node.quota
        }
      }) 
      return opt;
    })
  })
}

您可能需要稍作調整以獲得結果。

因為您要進行多個 api 調用,您可以使用Promise.all()然后以您喜歡的任何方式操作您的數據,還請注意,發布的用戶信息數組存在語法錯誤。

你的代碼應該是這樣的

Promise.all(usr.map(updatedNode=>JSON.parse(updatedNode.orderDetail).map(orderProduct=>
  axios.get(appUrl +'productDetail/'+orderProduct.id)))).then(p=>console.log(p) // manipulate your data here )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM