NodeJS SetImmediate и функция обратного вызова
Приведенный ниже код работает, но после того, как я обновил NODEJS с 4.. до 6.9.1, он неожиданно выдает ошибку (для каждого вызова)... означает, что он выполняет все рекурсивные вызовы отлично, а затем сообщает мне, как 20 раз сообщение об ошибке ниже...
Аргумент "обратного вызова" должен быть функцией.
Я ловлю ошибку - и все работает нормально. Это рекурсивный вызов - filterTrades. Я использовал это в течение длительного времени - и никогда не было проблем с ним раньше. Что делать? Я предполагаю, что код использует ненужные ресурсы, чтобы поймать что-то (что на самом деле не нужно)?
var id = setImmediate(filterTrades(rows, indexStart, indexEnd, offset));
clearImmediate(id);
2 ответа
@DaveNewton на деньги - вы, вероятно, хотите
var id = setImmediate( () => filterTrades(rows, indexStart, indexEnd, offset) );
clearImmediate(id);
и путь es5
var id = setImmediate( function(){
filterTrades(rows, indexStart, indexEnd, offset);
})
clearImmediate(id);
Возможно, вам следует заменить этот код на
filterTrades(rows, indexStart, indexEnd, offset);
и нет setImmediate/clearImmediate.
В предыдущих версиях Node.js вызов setImmediate с не-функцией, как вы делаете, ничего бы не сделал. Тогда вызов clearImmediate ничего не сделает. Таким образом, чтобы воспроизвести это поведение, просто выполните побочный эффект (т.е. вызовите filterTrades), но удалите все вещи setImmediate/clearImmediate.
Даже в текущих версиях Node.js код, предложенный, например, ответом @skav, ничего не даст. Если вы установите немедленный, а затем очистите его немедленно, это означает, что ничего не будет выполнено. Так что версия @skav просто полностью удалит вызов filterTrades; это эквивалентно удалению кода полностью.