Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 January 11

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Yevhen
Если Вы будете все время вызывать функцию саму из себя (бесконечная рекурсия), то у Вас стек закончится намного раньше)
Вот об этом я и говорю. Как мне лучше такое реализовать ? Если ретурн мне тут не поможет? через сетИнтервал?
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Вот об этом я и говорю. Как мне лучше такое реализовать ? Если ретурн мне тут не поможет? через сетИнтервал?
Какое "такое"? В вашем примере нет рекурсии
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Yevhen
Какое "такое"? В вашем примере нет рекурсии
а в моём случае у меня что? функция запускает выполнение промиса. А дальше если он резолв то вызывается еще раз функция. Как это назвать если не рекурсия?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
ну рекурсия же. она как бы из себя вызывет себя. и получается она в стеке будет родителем себя же. или нет?Просто Тимур в лекциях говорил что замыкания это всегда утечка. А вот рекурсия туда же относится или нет?
Если там есть контекст или какие либо другие данные то память будет расти, но для этого есть Garbage Collector.
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
а если ретурнуть сет иммидиейт из функции она покинет стек?

(function getCpuDataFunc(dataArr, timer) {
   return setImmidiate(() => {
     psList().then(d => {
         // send data to event bus
         setTimeout(getCpuDataFunc, timer, dataArr, timer);
     }).catch(console.log);
   }, dataArr, timer)
})(data, cpuTimer);
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Miseo
а в моём случае у меня что? функция запускает выполнение промиса. А дальше если он резолв то вызывается еще раз функция. Как это назвать если не рекурсия?
Это не та рекурсия, о которой Вы, скорее всего, думаете. Это не то же самое, что вызвать функцию саму из себя. В вашем примере после return функция завершается, а промис существует отдельно от нее и ждёт своей очереди в event loop. Когда очеред промиса придет, он вызовет функцию преданный callback из себя
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Yevhen
Это не та рекурсия, о которой Вы, скорее всего, думаете. Это не то же самое, что вызвать функцию саму из себя. В вашем примере после return функция завершается, а промис существует отдельно от нее и ждёт своей очереди в event loop. Когда очеред промиса придет, он вызовет функцию преданный callback из себя
Ага. Я так и думал. Спасибо. Значит оборачивать в имидиейт это лишнее
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
а если ретурнуть сет иммидиейт из функции она покинет стек?

(function getCpuDataFunc(dataArr, timer) {
   return setImmidiate(() => {
     psList().then(d => {
         // send data to event bus
         setTimeout(getCpuDataFunc, timer, dataArr, timer);
     }).catch(console.log);
   }, dataArr, timer)
})(data, cpuTimer);
А зачем её ретурнать? Можно и без ретурна.
Учтите что setImmediate не передает контекст
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alexander
А зачем её ретурнать? Можно и без ретурна.
Учтите что setImmediate не передает контекст
то есть? можно же передать агрументы после колбека в сетимидиейт это разве не контекст?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
то есть? можно же передать агрументы после колбека в сетимидиейт это разве не контекст?
Контекст это то что в теле функции и выше. Да, аргументы можно передавать
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Ага. Я так и думал. Спасибо. Значит оборачивать в имидиейт это лишнее
Посчитайте сначала как работает call stack. Общую теорию, не привязываясь к языку. Потом посмотрите лекции по event loop и асинхронным операциям в NodeJS. После этого посмотрите ещё раз на свой код и попробуйте разобраться что он делает
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Yevhen
Посчитайте сначала как работает call stack. Общую теорию, не привязываясь к языку. Потом посмотрите лекции по event loop и асинхронным операциям в NodeJS. После этого посмотрите ещё раз на свой код и попробуйте разобраться что он делает
Хорошо. Сегодня как раз займусь
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Хорошо. Сегодня как раз займусь
Посмотрите лекции Тимура.
Вот ещё материал по рекурсии https://ru.hexlet.io/courses/introduction_to_programming/lessons/recursion/theory_unit
https://ru.hexlet.io/blog/posts/recursive
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Yevhen
Посмотрите лекции Тимура.
Вот ещё материал по рекурсии https://ru.hexlet.io/courses/introduction_to_programming/lessons/recursion/theory_unit
https://ru.hexlet.io/blog/posts/recursive
Спасибо.
источник

Т

Тёмыч in NodeUA - JavaScript and Node.js in Ukraine
@tshemsedinov, а обновление версии на федоре обычно много траблов доставляет или безболезненно проходит? :)
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Тёмыч
@tshemsedinov, а обновление версии на федоре обычно много траблов доставляет или безболезненно проходит? :)
У меня за 5 лет 1 баг был со звуковухой, когда чувствительность микрофона сама начала подстраиваться и нельзя было это отключить и это быстро исправили
источник

VB

Volodymyr Bortniak in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
У меня за 5 лет 1 баг был со звуковухой, когда чувствительность микрофона сама начала подстраиваться и нельзя было это отключить и это быстро исправили
бачив на стрімах ту багу. На убунті 20 таке ж було. Доречі про федору, саме перейшов. Назбиралось вже декілька "нерівностей"
источник

ЯП

Ярослав Пицуха... in NodeUA - JavaScript and Node.js in Ukraine
Подскажите как решить проблему, у меня есть модуль в котором есть объект с переменными конфигурации. Я обращаюсь к этому модулю в самом начале при инициализации всего, беру из этого объекта значения. Все это работает синхронно. Но вот в чем проблема, мне надо обратиться к базе для присвоения этим переменным объекта значений. Но sequelize делает запросы асинхронно  следовательно значения переменным присвоятся только после всех синхронных инициализаций. Как мне приостоновить синхронный поток, до тех пор пока не выполнятся все запросы к бд ?
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Ярослав Пицуха
Подскажите как решить проблему, у меня есть модуль в котором есть объект с переменными конфигурации. Я обращаюсь к этому модулю в самом начале при инициализации всего, беру из этого объекта значения. Все это работает синхронно. Но вот в чем проблема, мне надо обратиться к базе для присвоения этим переменным объекта значений. Но sequelize делает запросы асинхронно  следовательно значения переменным присвоятся только после всех синхронных инициализаций. Как мне приостоновить синхронный поток, до тех пор пока не выполнятся все запросы к бд ?
Так выполни инициализацию всего в промисе. Вернее по его завершению.
источник

ЯП

Ярослав Пицуха... in NodeUA - JavaScript and Node.js in Ukraine
Запуск сервера в промисе ?
источник