这是一个棘手的问题。
所以,可以说我有两个JS对象,它们是通过REST调用和两个回调来获取的。
所以,我们有:
call1()
-POST
方法-将JSON解析为JS对象,路由:{{url}}/data
call1.json:
"data": [
{
"id": "1",
"volume:" "2000"
},
{
"id": "2",
"volume:" "3000"
},
{
"id": "3",
"volume:" "4000"
},
{
"id": "4",
"volume:" "5000"
}
];
call2(req.body.id)
-GET
方法-将JSON解析为JS对象,路由:{{url}}/data/:id
例如,如果我将req.body.id
传递为第一个响应得到的1
,它将打开该id
的数据。所以:
return call2(2)
将通过以下JSON返回数据:call2.json:
"data": [
{
"id": "1",
"add_data": "important string",
"add_data_2": "important string two"
},
];
最重要的是,在进行{{url}}/data
路由调用时-call()
我需要提供{{url}}/data/:id
路由中的所有数据,并将它们绑定到正确的id
。因此,例如,我要实现的方案是:
在call()
内:获取call1.json:
数据,进行与第一个对象中的call2(req.body.id)
一样多的ids
调用,然后将add_data
和{{ 1}}中的值。因此,例如最终对象看起来像这样。
add_data_two
这是我到目前为止尝试过的:
console.log(response)
"data": [
{
"id": "1",
"volume:" "2000",
"add_data": "important string",
"add_data_2": "important string two"
},
{
"id": "2",
"volume:" "3000",
"add_data": "important string",
"add_data_2": "important string two"
},
{
"id": "3",
"volume:" "4000",
"add_data": "important string",
"add_data_2": "important string two"
},
{
"id": "4",
"volume:" "5000",
"add_data": "important string",
"add_data_2": "important string two"
}
];
但是它不起作用。我如何获取所有数据,并使async get_data(req) {
try {
const objFirst = await call1(); //gets data
let objTwo = '';
for (let i = 0; i < objFirst.data.length; i++) {
objTwo = await call2({id: objFirst.data[i].id}) //gets data
}
return objFirst;
} catch(err) {
console.log("Error: ", err)
}
}
的数量与call2(id)
一样多,并将所有这些数据合并到一个对象中?基本上,我需要ids
进行此回调-> repeat
,而我们在call2(id)
中收到的ids
也是如此。
谢谢,很抱歉,它看起来一团糟。
答案 0 :(得分:1)
您可以为此使用map函数和散布运算符。像下面这样。 Call2函数只是模拟端点将返回的内容,但是您明白了。
var data = [
{
id: 1,
add_data: "1111"
},
{
id: 2,
add_data: "2222"
}
];
var data2 = [
{
id: 1,
volume: "bla"
},
{
id: 2,
volume: "bla"
}
];
function call2(id) {
return data2.filter(x => x.id == id)[0];
}
var result = data.map(x => {
var response = call2(x.id);
return {
...x,
...response
}
})
console.dir(result[0]);
解决方案的速度(遍历数组并执行http调用以获取更多数据的速度确实很慢)。如果您有很多这些功能需要合并来自不同数据源的数据,并且取决于您的项目规模,那么我将研究RXJS或GraphQL(如果您确实需要性能)。 RXJS具有强大的功能,可以合并,合并,映射等数据。