Size: a a a

2018 January 23

AM

Andrey Melikhov in Node.js SPb
так я не про рекрсивные вызовы nextTick, а про его коллбек
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
а это и получаются рекурсивные асинхронные вызовы через промежуточный синхронный код, разве нет?
источник

AM

Andrey Melikhov in Node.js SPb
почему, может ты ему закинул коллбек в котором дикий цикл с сотнями вызовов
источник

AM

Andrey Melikhov in Node.js SPb
А, понял
источник

AM

Andrey Melikhov in Node.js SPb
А есть дока про 1000?
источник

AM

Andrey Melikhov in Node.js SPb
Протупил )
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
пытаюсь найти. это ограничение было введено в ноду тогда, когда в нее добавили setImmediate(). то есть, где-то в районе версии 0.10 вроде
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
пардон, мои знания устарели, это было выпилено
1. как работало — https://github.com/nodejs/node-v0.x-archive/issues/4787
2. когда выпилили — «process.maxTickDepth has been removed, allowing process.nextTick() to starve I/O indefinitely» https://github.com/nodejs/node/wiki/API-changes-between-v0.10-and-v4#process
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
кажется, пришло время заглянуть в исходники :)
источник

AM

Andrey Melikhov in Node.js SPb
проще проверить в консоли )
источник

AM

Andrey Melikhov in Node.js SPb
в официальных доках нет про ограничение
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
Andrey Melikhov
проще проверить в консоли )
так не интересно :)
источник

AM

Andrey Melikhov in Node.js SPb
function test(){
 process.nextTick(test)
}
test();
источник

AM

Andrey Melikhov in Node.js SPb
вешает ивент луп намертво )
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
вот, это уже история! и файл src/node.js был 2 года назад распилен на несколько компонентов
https://github.com/nodejs/node/commit/0761c90204d7a0134c657e20f91bd83bfa6e677a#diff-6ff379484cbabad48301d485db111c08

так что, зафризить луп можно, угу :(
источник

AM

Andrey Melikhov in Node.js SPb
но почему
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
именно потому, что нет ограничений на рекурсивный вызов. в качестве эксперимента можно запустить этот же код на 0.10, и там нода должна тормозить, но все равно работать. и предупреждение о рекурсивном nextTick должно быть в консоли каждые 1000 итераций (по умолчанию)

где там мой nvm? ;)
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
Vitaliy ☆glukki☆ Meshchaninov
именно потому, что нет ограничений на рекурсивный вызов. в качестве эксперимента можно запустить этот же код на 0.10, и там нода должна тормозить, но все равно работать. и предупреждение о рекурсивном nextTick должно быть в консоли каждые 1000 итераций (по умолчанию)

где там мой nvm? ;)
(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
...(и так хз сколько раз)
RangeError: Maximum call stack size exceeded

нода вылетела. а я вообще-то ожидал, что она на следующий тик будет переносить отложенные вызовы
источник

AM

Andrey Melikhov in Node.js SPb
кажется они выпилили всё ради setImmediate(), мол используйте его, а nextTick забудьте навсегда
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
похоже на то
источник