Вот такой вот участок кода,
getAllTasks делает запрос в котором возвращается обьект с новостями, из которых я вытаскиваю нужные мне поля. Что бы получить ещё и текст новости, мне нужно сделать ещё один запрос к АПИшке, и там возвращается массив с блоками текста.
Так как я в методе
TaskRepository в
map вызываю асинхронную функцию и хочу что бы она что то возвращала, мне пришлось обернуть всё это дело в
await Promise.all.
Но до этого я в методе
getTextData ничего не возвращал а выводил результат
text просто в консоль, то работало всё буквально за пол секунды, но теперь когда я добавил
await Promise.all, код выполняется целых 5 секунд.
Подскажите как можно оптимизировать код что бы работало быстрее.
class TaskRepository {
getAllTasks = async () => {
const response = await axios.get(Variables.newsLineLink);
const data = await Promise.all(response.data.data.map( async (item) => {
return {
'_id': item.id,
'title': item.attributes.title,
'publishedAt': item.attributes.publishedAt,
'slug': item.attributes.slug,
'image': item.attributes.image,
'text': await this.getTextData(item.id)
}
}));
await dbNews.saveData(data, (err) => {
if (err.code === 11000) {
return;
}
console.error(err);
throw err;
});
return data
}
getTextData = async (newsId) => {
const news = await axios.get(Variables.oneNewsLink+newsId);
const text= news.data.data.attributes.content.blocks.map(item=>{
if (item.data.text) return item.data.text.replace(/<[^>]*>?/gm, '')
})
return text;
}
}