0

下面的代码有效 - 但是在我将 NODEJS 从 4.. 更新到 6.9.1 之后,它突然抛出一个错误(对于每个调用)......这意味着它完美地执行了所有递归调用,然后告诉我下面的错误消息的 20 倍。 ..

“回调”参数必须是一个函数。

我发现了错误 - 一切正常。它是一个递归调用 - filterTrades。我已经这样使用它很长时间了 - 以前从未遇到过问题。该怎么办?我猜代码使用不必要的资源来捕获某些东西(实际上不需要)?

var id = setImmediate(filterTrades(rows, indexStart, indexEnd, offset));
clearImmediate(id);
4

2 回答 2

1

@DaveNewton 赚钱了——你可能想要

var id = setImmediate( () => filterTrades(rows, indexStart, indexEnd, offset) );
clearImmediate(id);

和es5方式

var id = setImmediate( function(){
    filterTrades(rows, indexStart, indexEnd, offset);
})
clearImmediate(id);
于 2016-11-11T17:32:13.230 回答
0

可能您应该将此代码替换为

filterTrades(rows, indexStart, indexEnd, offset);

并且没有 setImmediate/clearImmediate。

  1. 在 Node.js 的早期版本中,像您正在做的那样使用非函数调用 setImmediate 将无济于事。然后,调用 clearImmediate 将无济于事。因此,要重现该行为,只需执行副作用(即调用 filterTrades),但删除所有 setImmediate/clearImmediate 内容。

  2. 即使在当前版本的 Node.js 上,例如 @skav 的答案提出的代码也无济于事。如果你设置一个立即数然后立即清除它,这意味着什么都不会执行。所以@skav 的版本将完全删除对 filterTrades 的调用;相当于完全删除代码。

于 2016-11-11T17:35:58.813 回答