Задать вопрос
@ban_machine_228_rus

Как сделать что-либо после завершения цикла?

API социальной сети ВКонтакте разрешает одним запросом получить только 100 постов, что меня не устраивает.
const resource = await resolveResource({
        api: vk.api,
        resource: context.$match[1],
    });
    const allPosts = [];
    context.reply(`Начинаю сбор информации...`);

    const counter = await vk.api.wall.get({
        // Получаем кол-во постов.
        owner_id: resource.id,
        count: 1,
    });

    for (let i = 0; i < counter.count; i += 100) {
        vk.api.wall
            .get({
                owner_id: resource.id,
                count: 100, // Больше 100 получить нельзя.
            })
            .then((res) => {
                allPosts.push(res); // Пушим пачки постов.
            });
    }

Следующий код пушит пачки постов в массив. Проблема в том, что при большом кол-ве постов эти запросы о-о-о-очень долго выполняются. Когда я пытаюсь вывести этот массив, там пустота. Это и понятно, ведь код синхронный и лог выполняется быстрее, чем получается вернуть данные хотя бы одного поста. Асинхронность - моя Ахиллесова пята, а тут ещё и цикл. Буду рад любой помощи.
  • Вопрос задан
  • 65 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@Che603000
c 2011 javascript
Код для простого случая:
const promises = [];
for (let i = 0; i < counter.count; i += 100) {
        promises.push(vk.api.wall
            .get({
                owner_id: resource.id,
                count: 100, // Больше 100 получить нельзя.
            })
    })
}
Promise.all(promises)
 .then(res => res.flat())
 .then (res =>{
   //res === пачки постов.
   // здесь можно что то сделать с постами
})


API социальной сети ВКонтакте разрешает одним запросом получить только 100 постов, что меня не устраивает.

Вы думаете вы самый хитрый ?
Если это не устраивает ВКонтакте, вы сразу все посты не получите, вас просто заблокируют.
Скорее всего, надо будет :вводить задержку между запросами по 100 штук или использовать разные IP адреса или разные аккаунты или может все вместе. Придется потрахаться...)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы