У меня возникла проблема: мне нужно объединить объекты и вернуть их в одной функции. Проблема в том, что для обоих объектов у меня почти одинаковые свойства, но значения разные.
Итак, я создал две отдельные функции, каждый из которых имеет один и тот же объект, почти одинаковые реквизиты, значения различий. Внутри каждой функции у меня есть URL-адрес, который вызывается в обоих случаях по-разному: case1 = skoda, case2 = toyota.
Проблема в том, что я не знаю, как сделать вызовы diff get (я добавил комментарий там), чтобы обе машины возвращались в одной функции, чтобы они были перечислены в одной ссылке xml. Теперь каждая машина находится по отдельной xml ссылке, потому что они находятся в двух отдельных файлах. Теперь должна быть одна ссылка, и я не могу понять, как это сделать.
Пожалуйста, кто-нибудь может мне немного помочь?
const env = process.env.NODE_ENV || 'development';
const apiUrl = config.api[env];
const skodaParams = {
categoryId: 'skoda',
limit: 1000,
offset: 0
};
const toyotaParams = {
categoryId: 'toyota',
limit: 1000,
offset: 0
};
const generateSkoda = skoda => {
// a lot of code for skoda prop
const skodaList = {
'g:id': product.carId
'g:brand': product.brand,
'g:color': product.color
'g:teamSkoda: 'Skoda'
}
return skodaList;
}
const generateToyota = toyota => {
// a lot of code for toyota prop
const skodaList = {
'g:id': product.carId
'g:brand': product.brand,
'g:color': product.color,
'g:teamToyota: 'Toyota'
}
return skodaList;
}
const getSkoda = () => {
return axios.get(apiUrl, { params: skodaParams });
}
const getToyota = () => {
return axios.get(apiUrl, { params: toyotaParams });
}
const createBothCars = () => {
// here I wanted to add some how two axios get calls for both skoda and toyota
return axios
.all([getSkoda(), getToyota()])
.then(response => {
console.log('response', response);
const skodaArray = [];
response.data.skoda.map(item => {
return skodaArray.push(generateSkoda(item));
})
const Obj = {
feed: {
$: {
xmlns: 'http://www.w3.org/2005/Atom',
'xmlns:g': 'http://base.google.com/ns/1.0'
},
title: 'Skoda cars list',
link: {
$: {
rel: 'self',
href: config.domain
}
},
entry: skodaArray
}
};
const objBuilder = new xml2js.Builder({
cdata: true
});
return objBuilder.buildObject(Obj);
})
.catch(error => {
console.log(error);
});
};
module.exports = createXml;
И на сервере. js I have:
const createXml = require('../src/xml/createXml');
app
.prepare()
.then(() => {
const server = express();
server.get('/both-cars.xml', (req, res) => {
res.header('Content-Type', 'application/xml');
(async function sendXML() {
const xmlFile = await createXml();
res.send(xmlFile);
})();
});
Update
Я обновил код с помощью ax ios .all, следуя комментарию, но в ответе я не получаю значений из обеих функций, но я получаю значения из последней функции, указанной в этом массиве:
[getSkoda (), getToyota ()]
теперь я получаю значения только из getToyota,
data: {
filters: [Array],
skoda: [],
toyota: [Array],
_version: 'Fri Jun 19 14:43:47 EEST 2020',
errorCode: 'no_error'
}
если я переключу порядок [getToyota (), getSkoda ()], я получу только значения из getSkoda.
Это из console.log:
data: {
filters: [Array],
skoda: [Array],
toyota: null,
_version: 'Fri Jun 19 14:47:09 EEST 2020',
errorCode: 'no_error'
}
Есть еще помощь?