Задать вопрос
  • Как ограничить максимальное количество параллельных запросов?

    @Bapen1k
    Работает!!!!))
    Пришлось писать свой Promise.race, который возвращает индекс решенного промиса в массиве.

    В конструктор передается лимит одновременных запросов, который не будет превышать функция. Функция делает сразу N запросов, где N это лимит, как только разрешается один промис делается еще один запрос.

    const promiseRace = promises => (
      new Promise((fulfil, reject) => {
        promises.forEach((promise, index) => {
          promise.then(data => fulfil({ data, index }), reject);
        });
      })
    );
    
    class Fetcher {
      constructor(maxConnections = 20) {
        this.maxConnections = maxConnections;
      }
    
      async request(urls, options = {}) {
        const responsePromises = [];
    
        for (const url of urls) {
          if (responsePromises.length >= this.maxConnections) {
            const { data: response, index } = await promiseRace(responsePromises);
            responsePromises.splice(index, 1);
          }
          responsePromises.push(fetch(url, options));
        }
    
        return Promise.all(responsePromises);
      }
    }
    
    // test
    (async () => {
      try {
        const fetcher = new Fetcher(2); // лимит 2
        const urls = [];
    
        for (let i = 0; i < 200; i++) {
          urls.push(`/api/user/${i}`);
        }
    
        const responses = await fetcher.request(urls);
        console.log('end');
      } catch (e) {
        console.error(e);
      }
    })();
    Ответ написан
    Комментировать
  • Как после вызова функции выполнить определенный код?

    @Bapen1k
    Почему нельзя написать
    await connection.release(); после await transaction.commit();?
    Ответ написан
  • Как сделать парсер из ВК?

    @Bapen1k
    Не знаю как в php, но в js можно вытащить регулярками. Ссылку на нужную вам картинку можно вытащить вот так
    console.log(str.match(/class=\"page_cover crisp_image _page_cover\" style=\"background-image: url\((https:\/\/.*jpg)/)[1]);

    А дальше проверяете изменилась ли ссылка, если изменилась то изменяете картинку на сайте. Еще можно проверять хэш сумму файла, это надежнее.
    Ответ написан
    2 комментария