@Fqwd123

Как оптимизировать код с Promise.all?

Вот такой вот участок кода, 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;
    }
}
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы