【问题标题】:NodeJS SetImmediate and callback functionNodeJS SetImmediate 和回调函数
【发布时间】:2017-03-25 23:38:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • filterTrades 是否返回函数?
  • 这 2 行放在函数 filterTrades() 内部。就像我写的那样——它是递归的。
  • 那不相关; setImmediate 的参数应该是一个函数,而您正在调用一个函数,因此关于 filterTrades 返回什么的问题。
  • 我回答了你的问题? FilterTrades 不返回函数 - 但它是一个函数并且代码有效。但是在我更新节点之后它也会抛出一个错误......
  • 是的,因为filterTrades 不返回函数,这是setImmediate 期望的参数。不,你没有回答这个问题,你告诉我filterTrades 是递归的,它没有说明它返回的内容。

标签: javascript node.js setimmediate


【解决方案1】:

@DaveNewton 很有钱——你可能想要

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

和 es5 方式

var id = setImmediate( function(){
    filterTrades(rows, indexStart, indexEnd, offset);
})
clearImmediate(id);

【讨论】:

  • 语法无法识别(WebStorm)?
  • @PabloDK 然后使用标准 ES5 做同样的事情
【解决方案2】:

也许你应该把这段代码替换为

filterTrades(rows, indexStart, indexEnd, offset);

并且没有 setImmediate/clearImmediate。

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

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

【讨论】:

  • 我不同意。代码一如既往地完美。 DOC 说:clearImmediate(immediate)# 添加于:v0.9.1 immediate setImmediate() 返回的立即对象。取消由 setImmediate() 创建的立即对象。所以我理解它的方式 - 就像......只是取消返回对象而不是实际本身......否则我猜我的代码将无法运行?
  • 另外...我可以通过在我的代码中的另一个位置使用 setImmediate/clearImmediate 直接查看和调整内存使用量...每个循环之间的工作量...它对性能......所以它什么都不做 - 它根本不是真的。
  • 和......你怎么能说@Skav 的答案不会执行任何事情?它与我的原始代码相同,它确实调用我的代码并执行??
  • Skav 的回答和你原来的代码不一样。
猜你喜欢
  • 2016-10-30
  • 2023-02-03
  • 2017-06-02
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2017-03-28
相关资源
最近更新 更多