Size: a a a

Флудилка нодскула

2017 February 20

AG

Andrew Gurylev in Флудилка нодскула
По крайней мере я как-то был в этом уверен. "Но проверять я это, конечно, не стану"
источник

E

Etki in Флудилка нодскула
У меня просто есть обширный кусок кода, который сводится к
new Promise((res, rej) -> {

    setTimeout(() -> rej(new TimeoutException()), 1);

    Promise.reject(new Error()).then(res, rej);

});


в одном сраном тесте на трависе это все-таки выстрелило TimeoutException, а не Error, при этом там вывод логов такой, будто сначала отработал setTimeout, потом reject-then-rej, и только потом - then, повешенный на всю конструкцию. На локальной машине 25000 выполнений подряд без аномалий. Я не понимаю даже, куда думать.
источник

E

Etki in Флудилка нодскула
так, что-то наврал с кодом, сейчас поправлю
источник

AS

Aleksei Safin in Флудилка нодскула
раз в год и палка стреляет
вообще, по правилам ивэнт-лупа TimeoutException не должен выстреливать
источник

E

Etki in Флудилка нодскула
Я пока думаю, может, кто-то просто украл процессор на эту миллисекунду сразу после установки таймаута, и он сразу после установки запустил новый цикл event loop
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Флудилка нодскула
ID:57684913
пока 50/50 - атом проще и пока мне удобнее потому что все под себя настроено и годами работает, если бы с начала webstorm юзал вероятно он был бы удобнее... поэтому решил пару месяцев поюзать и потом сделать вывод
мне нравится тем, что не приходится ничего вроде доустанавливать. из коробки — буквально пару галок включить, чтобы кончики из проекта читались, да раскладку хоткеев переключить, и все :)
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Флудилка нодскула
Etki
У меня просто есть обширный кусок кода, который сводится к
new Promise((res, rej) -> {

    setTimeout(() -> rej(new TimeoutException()), 1);

    Promise.reject(new Error()).then(res, rej);

});


в одном сраном тесте на трависе это все-таки выстрелило TimeoutException, а не Error, при этом там вывод логов такой, будто сначала отработал setTimeout, потом reject-then-rej, и только потом - then, повешенный на всю конструкцию. На локальной машине 25000 выполнений подряд без аномалий. Я не понимаю даже, куда думать.
а разве конструкция Promise.reject().then(func) гарантирует, что func будет вызван синхронно? тут где-то было большое обсуждение этого недавно

к тому же, если я не ошибаюсь, в 0.12 помимо process.next() появился setImmediate(), и была изменена process.next(). в текущем лупе будет выполнено в сумме до 1000 запусков хендлеров отложенных через process.next(), после чего ивентлуп пойдет дальше. а setImmediate() откладывает выполнение на следующий круг ивентлупа
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Флудилка нодскула
может быть, можно как-то передела код, чтобы избежать этой гонки в коде?
источник

E

Etki in Флудилка нодскула
нет, но я залезв библиотеку, которую использую для promise, там всего два вызова set*, и это setTimeout в .done() (его не использую ни я, ни библиотека) и setTimeout в отслеживателе unhandled rejected promise
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Флудилка нодскула
я ошибся, история с setImmediate() произошла в релизе 0.10 :)
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Флудилка нодскула
зато я наконец прочитал отложенное на старость: https://github.com/ryanmcdermott/clean-code-javascript/blob/master/README.md

оказалось, что я уже достаточно давно стараюсь следовать этим рекомендациям, и других заставляю — приятно, что совпало :)
источник
2017 February 21

NK

ID:57684913 in Флудилка нодскула
кто с lerna работал?
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Флудилка нодскула
нет, но читал ридми. подивился, ужаснулся и поскорее закрыл в надежде не сталкиваться с потребностью использовать ее :)
источник
2017 February 22

E

Etki in Флудилка нодскула
а представим, что у меня есть такой интерфейс:
ExecutionQueue.put(Function<T> task) : Promise<T>
В какой-то момент очередь могут отрубить, и после этого добавлять новые таски нельзя. Как правильней это обработать: вернуть Promise.reject(new RejectedException()) или просто throw new RejectedException()?
источник

TM

Tim Marinin in Флудилка нодскула
Первое.
источник

TM

Tim Marinin in Флудилка нодскула
Код ожидает, что put вернёт промис (следовательно все ошибки будут в нём)
источник

TM

Tim Marinin in Флудилка нодскула
Ну, так мне кажется
источник

E

Etki in Флудилка нодскула
оке, спасибо
источник

NK

ID:57684913 in Флудилка нодскула
Если throw в промисе сделать то он в catch правильно уйдет, да? Или я вопроса не понял? (
источник

TM

Tim Marinin in Флудилка нодскула
Это если уже внутри промиса кинуть
источник