Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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
Javascript 争论被神秘地替换为“辩论”;“真的”;函数调用中(node.js)_Javascript_Node.js - Fatal编程技术网

Javascript 争论被神秘地替换为“辩论”;“真的”;函数调用中(node.js)

Javascript 争论被神秘地替换为“辩论”;“真的”;函数调用中(node.js),javascript,node.js,Javascript,Node.js,我知道规则“如果您认为环境被破坏了,而不是您的代码被破坏了,请三思”。但这个问题正使我下定决心去做 因此,我有一个通用的错误处理程序,它将尝试使用错误回调、发出错误或抛出错误,按优先顺序排列 exports.handleError=函数(fallbackOrThrow、errType、err、callback、nextTick){ if(!(err instanceof Error | | libToolsTypes.isString(err))){ nextTick=回调; 回调=错误; er

我知道规则“如果您认为环境被破坏了,而不是您的代码被破坏了,请三思”。但这个问题正使我下定决心去做

因此,我有一个通用的错误处理程序,它将尝试使用错误回调、发出错误或抛出错误,按优先顺序排列

exports.handleError=函数(fallbackOrThrow、errType、err、callback、nextTick){ if(!(err instanceof Error | | libToolsTypes.isString(err))){ nextTick=回调; 回调=错误; err=errType; errType=null; } if(nextTick===true&&callback){ process.nextTick(exports.handleError.bind(this,fallbackorhrow,errType,err,callback,false)); 返回true; } 如果(错误类型){ if(errType instanceof Error){ if(!(err instanceof errType)){ err=新的err类型(err); } } else if(libToolsTypes.isFunction(errType)){ err=errType(err); } } if(callback&&callback.call){ callback.call(这个,err); 返回true; } if(fallbackOrThrow&&fallbackOrThrow.emit){ 发出(“错误”,err); 返回true; } if(libToolsTypes.isFunction(fallbackOrThrow)){ 返回fallbackOrThrow(错误); } if(fallbackOrThrow==true){ 犯错误; } 返回false; }; 对不起,积垢,我故意让它进来,以防这里有什么东西引起问题。重要的部分是
fallbackOrThrow
参数,它通常是
EventEmitter
-派生对象或“true”,意思是“如果无法处理错误,则抛出错误”

问题是:偶尔,非常偶尔,代码达到
throw err路径,即使我确定提供了对EventEmitter对象的引用。到目前为止,当从代码的一个非常特定的部分调用时会发生这种情况,因此问题可能与此有关。这就是调用代码的外观(再次,故意未过滤):

需要处理的函数(ob){
if(_queue.length&&_queue.length>=options.queueLength){
noPlaceInQueueFor(_queue.pop());
}
if(_queue.length>=options.asyncQueueLength){
noPlaceInQueueFor(ob);
}否则{
_队列推送(ob);
}
函数noPlaceInQueueFor(ob){
tools.handleError(that,null,new NoPlaceInQueueError(),ob.callback);
}
}
是对当前事件发射器对象的(长期)引用

所以,你可能会认为我在某个时候犯了一个错误,而这些论点并不是我所认为的那样。然而,我只是这样做了:

//记录调用handleError之前的状态
log(即/*,一组其他值*/);
tools.handleError(that,null,new NoPlaceInQueueError(),ob.callback);
//就在把手里面,在我们扔之前,记下
if(fallbackOrThrow==true){
log(fallbackOrThrow/*,一组其他值*/);
犯错误;
}
输出为(截断的“一组其他值”部分):

因此,
EventEmitter
派生对象以某种方式变成了
true
一个函数调用。如果没有严重的内存损坏,我不认为这是可能的。或者我只是错过了一些显而易见的东西

这就是我对这个问题的希望。有人经历过类似的事情吗?是否有我不知道的bug报告或javascript问题?只是希望在我开始将inspector添加到生产服务器之前能得到一个快速提示或链接

Node.js版本:v0.10.28

编辑1

堆栈跟踪。没什么特别的。它输入预期的函数并抛出错误

/home/project/node/Common/Tools/toolsFunctions.js:216
            throw err;
                  ^
NoPlaceInQueueError: There is no place in queue
    at noPlaceInQueueFor (/home/project/node/MyObject/objectWithQueue.js:196:37)
    at needToHandleLater (/home/project/node/MyObject/objectWithQueue.js:186:4)

(堆栈跟踪匿名化)

您的
console.log()
调用令人困惑,因为您没有包含指示符字符串,以便能够确定您看到的是哪个
console.log()
输出。另外,我敢打赌这不是节点错误。同意这不是节点错误。但这是什么呢?我会试着整理一下输出。很难说。“nextTick”是做什么的?你有没有试过抓取堆栈跟踪,看看当事情变得异常时“handleError”函数是如何被调用的?没有什么可疑的。见编辑1。
/home/project/node/Common/Tools/toolsFunctions.js:216
            throw err;
                  ^
NoPlaceInQueueError: There is no place in queue
    at noPlaceInQueueFor (/home/project/node/MyObject/objectWithQueue.js:196:37)
    at needToHandleLater (/home/project/node/MyObject/objectWithQueue.js:186:4)