问题描述
有人可以解释(或更好地提供解决方案)为什么当我使用 async 函数时我的错误堆栈跟踪中有错误的数字?
class asynctest {
async foo() {
try {
throw new Error("error msg1") // wrong stack trace
} catch(e) {
console.log(e)
}
}
}
const test = new asynctest();
test.foo()
----------
Error: error msg1
at asynctest.<anonymous> (...path\dist\app.js:15:23)
at Generator.next (<anonymous>)
at ...path\dist\app.js:8:71
at new Promise (<anonymous>)
at __awaiter (...path\dist\app.js:4:12)
at asynctest.foo (...path\dist\app.js:13:16)
at Object.<anonymous> (...path\dist\app.js:24:6)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
这是我在 ...path\dist\app.js 中构建的文件
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg,_arguments,P,generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve,reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled,rejected); }
step((generator = generator.apply(thisArg,_arguments || [])).next());
});
};
class asynctest {
foo() {
return __awaiter(this,void 0,function* () {
try {
throw new Error("error msg1");
}
catch (e) {
console.log(e);
}
});
}
}
const test = new asynctest();
test.foo();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcgluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxNQUFNLFNBQVM7SUFDTCxHQUFHOztZQUNMLElBQUk7Z0JBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUNoQztZQUFDLE9BQU0sQ0FBQyxFQUFFO2dCQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDakI7UUFDTCxDQUFDO0tBQUE7Q0FDSjtBQUVELE1BQU0sSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFFN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBIn0=
我看到在这个文件中有一个变量 __awaiter,它将整个代码向下移动了几行。但是如何获得正确的堆栈跟踪?有什么建议吗?
谢谢。
解决方法
您需要在启用源映射支持的情况下运行 nodejs。 一个完全做到这一点的图书馆是: https://www.npmjs.com/package/source-map-support
只需安装它并像这样导入:
import 'source-map-support/register'
并且您应该开始在堆栈跟踪中看到正确的行号。