在一个响应中合并响应数据

在一个响应中合并响应数据

问题描述:

我有一个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'其中键可以是一个变量 –

问题不是很清楚。

但是,它听起来像你得到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) 
    }); 
}); 

在另一方面,这应该可以在查询级别处理。

您可以像这样将它们组合起来:

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