All streams
Search
Write a publication
Pull to refresh
60
0
David Klassen @f0rk

Программист

Send message

Тут немного другая задача решается

Ок, раз уж пошла такая пьянка, добавлю свой вариант :)
function collectSpammers(n) {
  const spammers = [];
  
  return Array(n).fill(0).reduce(m => m
    .then(() => getUser()
      .then(function check(u) {
        if (u === null) return Promise.reject();
        
        return isSpammer(u).then(spammer => { 
          if (spammer) spammers.push(u);
          else return getUser().then(check);
        });
      })), Promise.resolve()).then(() => spammers, () => spammers);
}

collectSpammers(10).then(spammers => console.log(spammers));

getUser().then(u => { if (!u) return spammers }) Зарезолвится с массивом spammers, потом вы вызываете .then(() => collectSpammers(spammers)), и процесс зациклился, пока getUser() возвращает null следующий в цепочке then будет вызывать collectSpammers

Если spammers.length <= 10 && user == null он вроде бы продолжит выполняться
Конструктивная критика и предложения по улучшению и оптимизации данного кода приветствуются.

Предлагаю все выкинуть и поставить код google analytics на страницу.
Например, дефолтный шорткат в Idea для рефакторинга — Shift-F6. Можно перемапить конечно, но я стараюсь не менять дефолтные настройки.
а должны ли в результатах голосований наблюдаться какие-нибудь закономерности или нет?

Разумеется, должны. Другой вопрос, какие именно? И в чем их причина? Очевидно, что партия ведущая более активную предвыборную кампанию, при прочих равных должна набрать больше. Но в чем например причина концентрации результатов в Саратовской области вокруг одной точки?
Любляна, Ивана Цупала? Серьезно? :)
У Амазона вчера как минимум некоторые бакеты в s3 не резолвились.
ни разу не видел онлайн банкинга с автологином
результат всегда получается по время инициализации самого промиса

Всегда, кроме тех случаев, когда он получается асинхронно :)
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise
executor
A function that is passed the arguments resolve and reject. The executor function is executed immediately by the Promise implementation, passing resolve and reject functions (the executor is called before the Promise constructor even returns the created object). The resolve and reject functions, when called, resolve or reject the promise respectively. The executor normally initiates some asynchronous work and then, once that completes, calls either the resolve or reject function to resolve the promise or else reject it if an error occurred.

Да, он выполняется при создании промиса не зависимо от того, сколько раз у него вызывался метод then() (даже если 0 раз). Думаю, это хотел сказать автор, просто выразил свою мысль некорректно. Executor кстати не асинхронно запускается, другое дело, что внутри него как правило есть асинхронный код. А в целом, все эти моменты легко понять, если на вывод этого кода внимательно посмотреть:
p = new Promise(r => { console.log('executor'); r(); });
console.log('after creation');
p.then(() => console.log('in chain 1')).then(() => console.log('in chain 2'));
p.then(() => console.log('in chain 3'));
console.log('after chaining');

Думаю, имелось в виду, что executor выполняться второй раз не будет.
Обратите внимание на то, что каждая цепочка обещаний заканчивается вызовом catch(). Если этого не делать, то возникающие ошибки будут пропадать в недрах обещаний и, тогда невозможно будет установить, где произошла ошибка.

Неправда, нигде они не теряются и вполне их можно захендлить

window.addEventListener('unhandledrejection', e => { 
    console.log('handle', e);
    return e.preventDefault();
});


Если обработчика не будет, то промис просто кинет exception, который можно увидеть в консоли и принять меры.
Легким движением руки Хабр превращается… в LOR.
Меня вот интересует, что понимается под «значимой частью» программного обеспечения?
Вот например https://github.com/mtschirs/js-objectdetect/blob/master/js/objectdetect.js:
/**
 * Converts from a 4-channel RGBA source image to a 1-channel grayscale
 * image. Corresponds to the CV_RGB2GRAY OpenCV color space conversion.
 * 
 * @param {Array} src   4-channel 8-bit source image
 * @param {Array} [dst] 1-channel 32-bit destination image
 * 
 * @return {Array} 1-channel 32-bit destination image
 */
convertRgbaToGrayscale = function(src, dst) {
  var srcLength = src.length;
  if (!dst) dst = new Uint32Array(srcLength >> 2);

  for (var i = 0; i < srcLength; i += 2) {
    dst[i >> 2] = (src[i] * 4899 + src[++i] * 9617 + src[++i] * 1868 + 8192) >> 14;
  }
  return dst;
}

Я взял эту реализацию общеизвестного алгоритма, со временем, в моем коде она превратилась в:
const GRAYSCALE_COEF_R = 4899;
const GRAYSCALE_COEF_G = 9617;
const GRAYSCALE_COEF_B = 1868;

/**
 * Converts RGBA image to grayscale.
 *
 * @param {ArrayBuffer} src Source buffer with 4-channel RGBA image
 * @param {ArrayBuffer} dst Destination buffer for 8bit 1-channel grayscale image
 */
function grayscale(src, dst) {
    const srcView = new Uint8Array(src);
    const dstView = new Uint8Array(dst);

    for (let i = 0; i < srcView.length; i += 4) {
        dstView[i >> 2] = ((srcView[i] * GRAYSCALE_COEF_R) +
                           (srcView[i + 1] * GRAYSCALE_COEF_G) +
                           (srcView[i + 2] * GRAYSCALE_COEF_B) + 8192) >> 14;
    }
}

Означает ли это, что я использую «значимую часть» библиотеки https://github.com/mtschirs/js-objectdetect?
В Chrome есть флажек --js-flags="--expose-gc", с ним в коде можно вызывать gc(), бывает полезно при ловле утечек.
Если образ винды в докере получится развернуть под линуксом и он будет хорошо работать — вполне себе вариант хотя бы для новых клиентов

Я написал, что не получится так.
Ну, если ядро винды может предоставить тот же api и те же возможности что и линукс, то почему нет, но запускать он очевидно сможет только windows процессы.

Information

Rating
Does not participate
Location
Таиланд
Date of birth
Registered
Activity

Specialization

Backend Developer, Software Architect
Lead
From 12,000 $