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

    @GrayHorse
    Это называется семафором (Semaphore).
    class Semaphore {
        constructor(max = 1) {
            if (max < 1) { max = 1; }
            this.max = max;
            this.count = 0;
            this.queue = [];
        }
        acquire() {
            let promise;
            if (this.count < this.max) {
                promise = Promise.resolve();
            } else {
                promise = new Promise(resolve => {
                    this.queue.push(resolve);
                });
            }
            this.count++;
            return promise;
        }
        release() {
            if (this.queue.length > 0) {
                const resolve = this.queue.shift();
                resolve();
            }
            this.count--;
        }
    }


    const semaphore = new Semaphore(10);
    for (const url of urls) {
        await semaphore.acquire();
        void downloadUrlSynchronized(url, semaphore);    
    }
    
    async function downloadUrlSynchronized(url, semaphore) {
        const resp = await fetch(url);
        const blob = await resp.blob();
        semaphore.release();
        // const name = new URL(url).pathname.slice(1);
        // downloadBlob(blob, name, url);
    }

    Загрузка (fetch) будет не больше 10 в один момент, что собственно и требовалось.

    ---
    На примере 3:
    61ee50a555b4a690601785.png
    Ответ написан
  • Как отсортировать объекты по удаленности, зная координаты на JS?

    EreminD
    @EreminD
    Кое-что умею
    Геометрия. Какой-то там класс
    1. Фактически, имеем кучу векторов.
    2. Начало у них у всех в одной точке (текущей). Для удобства, держим ее за (0, 0)
    3. Координаты ваших точек - концы векторов
    4. Считаем длину каждого вектора
    //тут массив с вашими объектами
    var items = [ {x: 1, y: 1}, 
    			{ x: 22, y: 0}, 
    			{ x: 2, y: 0},
    			{ x: 0, y: 1},
    			{ x: 2, y: 2},
    			{ x: 1, y: 2},
    			]
    
    //тут будут храниться пары {объект, удаленность}
    var sorteditems = [];
    
    //получаем для каждого удаленность
    items.forEach(getLength);
    //сортируем по удаленности. сначала самые ближние. Если поставить {return b.len - a.len;}, то будут сначала самые дальние
    var res = sorteditems.sort(function compare(a, b){return a.len - b.len;}); 
    //фсе
    console.log(res);
    
    
    //вот тут описано, как получаем для каждого удаленность
    function getLength(item, index, array) {
      var len = Math.sqrt(Math.pow(item.x, 2) + Math.pow(item.y, 2));
      sorteditems.push({item, len});
    }


    UPD: считать текущее положение как (0; 0) - неправильно, поскольку координаты объектов начинаются не относительно пользователя, а относительно общего нуля.
    Так что корректный расчет удаленности такой:
    1. Получить геопозицию смартфона X и У
    2. Для каждого вашего объекта на карте, находим вектор: AB = {item.x - X; item.y - Y}.
    3. А потом уже только высчитываем длину вектора АВ (как - описано выше)
    Ответ написан
    Комментировать
  • Что не так с прототипным наследованием в js? Чем оно отличается от классического?

    @t800zippygod
    Именно из-за того, что свойство можно "пощупать", многие и не любят js.
    Как все происходит при классическом наследовании: класс-родитель "рассказывает" своим детям как надо жить на этой планете и пускает инстансы(потомков) в свободное плавание. Он говорит детям: вот ребят, берите мои знания (свойства), мои умения (методы) и уходите, можете развивать мой опыт, добавлять новую функциональность. При этом дети САМОСТОЯТЕЛЬНЫ, они не зависят от маменьки.
    В JS дети более капризные, и с ними больше проблем. Они говорят матери: так-так, зачем мне самому чему-то учиться, ведь я всегда могу придти к тебе и узнать то, что мне нужно (то есть обратиться через прототип). Конечно, можно им переписать родительские методы или свойства, но по дефолту они берут все у родителей через прототип. И тут начинаются проблемы: через какое-то время маменька захворала и переопределила половину методов (это, конечно, отвратительная практика). Приходит к ней сын и разочаровывается.

    Я попытался на жизненном примере описать то, что происходит. Конечно, мелких нюансов много. На самом деле прототипное наследование дает даже бОльшую гибкость, чем классическое. Но где свобода творчества -- там велик шанс появления ошибок. И за это JS опасаются. Почему на Java строят архитектуру на миллионы строк ? -- потому что это строгий язык во всех отношениях, и ошибок из-за этого меньше.
    Ответ написан
    2 комментария
  • Как настроить google таблицы для получения текста и темы письма из gmail?

    ForestAndGarden
    @ForestAndGarden
    Совершенствовать среду обитания
    Возможно. Можно воспользоваться сервисами (Microsoft Flow, Integromat, Zapier, IFTTT, etc.), можно написать скрипт в Google Apps Script.

    Если импортированное письмо нужно разобрать, то а) формулами или б) скриптом.
    Ответ написан
    1 комментарий
  • Как разрешить выполнение скрипта под другим пользователем?

    PolarBearGG
    @PolarBearGG
    I know that I know nothing
    через onOpen создать меню в табличке и чел при первом запуске даст добро на запуск скрипта нажам кнопку в меню
    Ответ написан
    1 комментарий