Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Uncaught TypeError:回调不是process.nextTick中的函数_Node.js_Event Loop - Fatal编程技术网

Node.js Uncaught TypeError:回调不是process.nextTick中的函数

Node.js Uncaught TypeError:回调不是process.nextTick中的函数,node.js,event-loop,Node.js,Event Loop,我得到以下错误。它显然来自传递给process.nextTick的回调。鉴于堆栈跟踪实际上不可用,我如何调试它?幕后发生了什么,我如何在一个更大的项目中解决这个问题 TypeError: callback is not a function at nextTickCallbackWith0Args (node.js:420:9) at process._tickDomainCallback (node.js:390:13) 注意:较旧版本的Node有一个不同的process.n

我得到以下错误。它显然来自传递给
process.nextTick
的回调。鉴于堆栈跟踪实际上不可用,我如何调试它?幕后发生了什么,我如何在一个更大的项目中解决这个问题

TypeError: callback is not a function
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickDomainCallback (node.js:390:13)
注意:较旧版本的Node有一个不同的
process.nextTick
实现,并抛出以下堆栈跟踪

Uncaught TypeError: undefined is not a function
    at process._tickCallback (node.js:415:13)

Node.js tick callback更喜欢在传递给
process.nextTick
的函数不是传递tick后的函数时抛出错误,而不是在第一次调用它时告诉您

其中一个函数将在打勾后被调用:

// this will print "hi!", followed by "hello there"
process.nextTick(function() {
  console.log('hello there');
});
console.log('hi!');
在下一次勾选之前,非函数实际上并不重要:

// this will just print "hi!", and an error will be thrown later on
process.nextTick(undefined);
console.log('hi!');
下面,我将概述两种可以用来追踪罪犯的诊断工具

工具1:
longjohn
事实证明,这种情况非常普遍,以至于有一种工具可以使用以前的标记信息扩展堆栈跟踪

只需安装(可用),并在进程启动时要求安装。这将产生类似于以下内容的堆栈跟踪:

TypeError: Cannot read property 'apply' of undefined
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickCallback (node.js:349:13)
    at Function.Module.runMain (module.js:443:11)
    at startup (node.js:139:18)
    at node.js:968:3
---------------------------------------------
    at Object.<anonymous> (.../example.js:3:9)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)
    at node.js:968:3
注意:我不建议对生产代码执行此操作,但它确实可以使您更容易地找到除函数to
process.nextTick
之外的其他内容。请记住,这是在修改全局
过程
变量,因此它可能会在某个点中断,这当然不是最佳做法,但它可以很好地发现小问题。(附录:自从我最初写这篇文章以来,我不得不修改它,因为它坏了一次。)

跟踪:未定义不是函数
在process.nextTick(…/example.js:5:13)

反对。()。

回答得很好,也很清楚,谢谢你的建议。如果你能想出好主意,你应该在问题的标题处加上“\u tickCallback”或“nextTick”,谢谢!我可能还会添加一个到longjohn的链接——这是一个更通用的工具
var nextTick = process.nextTick;

process.nextTick = function(callback) {
  if (typeof callback !== 'function') {
    console.trace(typeof callback + ' is not a function');
  }
  return nextTick.apply(process, arguments);
};
Trace: undefined is not a function
    at process.nextTick (.../example.js:5:13)
    at Object.<anonymous> (.../example.js:10:9)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)
    at node.js:968:3