2017-12-18 157 views
1

我有一個NodeJS服務器從兩個不同的API中獲取數據,然後我想在兩個JSON響應中合併結果。在這裏,我向您發送代碼:在一個響應中合併響應數據

EventModal.eventSearch(eventReq, type, async function (eventRes) { 
     EventModal.getBoostEvents(eventReq, type, async function (eventBoostRes) { 
          res.json({ 
           status: true, 
           data: eventRes, 
           eventBoostRes: eventBoostRes, 
          }); 
     }); 
    }); 

我想在data。所以我怎麼能做到這一點一個響應eventReseventBoostRes

eventReseventBoostRes是查詢結果。

在此先感謝。

+0

你可以擴展'eventRes'和'eventBoostRes'包含什麼。 –

+0

[我怎樣才能動態合併兩個JavaScript對象的屬性?](https://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically) –

+0

在JS中,一切都像'obj.key = val'一樣簡單,其中val可以是一個js可指定的實體,如整數,對象或函數。它CSN是也'OBJ [鍵] = val'其中鍵可以是一個變量 –

回答

1

問題不是很清楚。

但是,它聽起來像你得到2個數組,並且你想在響應中返回一個數組。快速(髒)的方式來做到這一點是使用array.concat(anotherArray)功能:

EventModal.eventSearch(eventReq, type, async function (eventRes) { 
    EventModal.getBoostEvents(eventReq, type, async function (eventBoostRes) { 
     res.json({ 
      status: true, 
      data: eventRes.concat(eventBoostRes) 
     }); 
    }); 
}); 

然而,這將導致2個查詢同步運行,是不是最佳的。你可以優化此使用的承諾和運行2個查詢並行:

Promise.all([ // this will run in parallel 
    EventModal.eventSearch(eventReq, type), 
    EventModal.getBoostEvents(eventReq, type) 
]).then(function onSuccess([ eventRes, eventBoostRes ]) { 
    res.json({ 
    status: true, 
    data: eventRes.concat(eventBoostRes) 
    }); 
}); 

在另一方面,這應該可以在查詢級別處理。

2

您可以像這樣將它們組合起來:

EventModal.eventSearch(eventReq, type, async function (eventRes) { 
    EventModal.getBoostEvents(eventReq, type, async function (eventBoostRes) { 
     res.json({ 
      status: true, 
      data: { 
       eventRes, 
       eventBoostRes 
      } 
     }); 
    }); 
}); 
+0

它包含在不同的數組對象中。所以我需要作出迴應的修改。 –

+1

你可以粘貼什麼'eventRes'和'eventBoostRes'可以看起來像?並粘貼你想要'數據'包含在響應中的結果? – maxpaj

相關問題