blog icon indicating copy to clipboard operation
blog copied to clipboard

node try catch 内如果嵌套了require,会阻止require的文件的错误栈显示

Open xtx1130 opened this issue 7 years ago • 0 comments

今天在调试的时候遇到的一个比较蛋疼的问题,描述如下:

我在index.js中引入了一个文件,是以一种比较奇葩的方式引入的:

for(let i = 0; i<scanner.length;i++){
	try {
               //在这里require的,外层有个try
		let valiInstance = require(path.join(projectPath + filePath + scanner[i]));
		privateDec[subStr(valiInstance.id)] = valiInstance;
	} catch (e) {
		throw new Error(e);
	}
}

然后莫名其妙的就报错了: issue6-1 然后我就开始慌了/手动滑稽,通过错误栈可以看出来明显是多了或者少了个大括号{,但是特么的,这个报错行数显示的是new Error(e)的行数,/黑人问号脸,这个时候就有问题了,难道错误栈没带出来吗?经过排查,果然是这样……比如我这样操作一下:

for(let i = 0; i<scanner.length;i++){
	//try {
		let valiInstance = require(path.join(projectPath + filePath + scanner[i]));
		privateDec[subStr(valiInstance.id)] = valiInstance;
	//} catch (e) {
	//	throw new Error(e);
	//}
}

注释掉try catch,后面的真凶就毕露了: issue6-2 是我require里面的文件报错了。 不过这种奇葩错误应该不是很多见,因为不会有人try catch中套着require。我也是在本地开发调试的时候偶然发现的。。。囧

xtx1130 avatar Oct 31 '17 02:10 xtx1130