javascript - 当 Axios 发布错误时,DataDog 检测会破坏代码片段
问题描述
为了隔离我在使用 dd-trace 检测 ExpressJS 应用程序后看到的问题,我将一些代码从实用程序文件中移到了主线代码中。
this.client
是一个 Axios 实例。
无论 POST 是否成功,此代码段都有效:
return (async (fn) => {
try {
return Promise.resolve(await fn())
} catch (e) {
return Promise.reject(e)
}
return Promise.reject(new Error('Unusual Error'))
})(() => this.client.post(`foo/bars`, data, opts))
如果 Axios POST 抛出错误,则 DD 检测代码使用以下代码段抛出异常并挂起。(是的,这是一个单次迭代for
循环。和我一起工作。)
return (async (fn) => {
for (let i = 0; i < 1; i++) {
try {
return Promise.resolve(await fn())
} catch (e) {
return Promise.reject(e)
}
}
return Promise.reject(new Error('Unusual Error'))
})(() => this.client.post(`foo/bars`, data, opts))
IRL 代码越来越棘手,但这些片段重现了问题。
顶部片段适用于成功和错误 POST 的检测,底部片段适用于成功,失败时出错。
不知道该怎么想。记录并没有多大帮助(并且会受到无法破坏的健康 ping 启动的阻碍)。
我想我错过了一些愚蠢的东西。如果需要,我可以提供更多信息。
我在某些情况下看到的异常:
TypeError: Cannot read property 'push' of undefined
at DatadogSpan._createContext (/app/node_modules/dd-trace/packages/dd-trace/src/opentracing/span.js:76:32)
at new DatadogSpan (/app/node_modules/dd-trace/packages/dd-trace/src/opentracing/span.js:30:30)
at DatadogTracer._startSpanInternal (/app/node_modules/dd-trace/packages/dd-trace/src/opentracing/tracer.js:73:18)
at DatadogTracer._startSpan (/app/node_modules/dd-trace/packages/dd-trace/src/opentracing/tracer.js:62:17)
at DatadogTracer.Tracer.startSpan (/app/node_modules/opentracing/lib/tracer.js:61:21)
at Object.wrapMiddleware (/app/node_modules/dd-trace/packages/dd-trace/src/plugins/util/web.js:104:25)
at callHandle (/app/node_modules/dd-trace/packages/datadog-plugin-router/src/index.js:111:14)
at wrapCallHandle (/app/node_modules/dd-trace/packages/datadog-plugin-router/src/index.js:41:14)
at Layer.handle_error (/app/node_modules/express/lib/router/layer.js:71:5)
at trim_prefix (/app/node_modules/express/lib/router/index.js:315:13)
解决方案
推荐阅读
- html - 如何在引导程序中设置导航链接到当前页面
- linux - 如何使用 AWK 从文件中连续输出行
- swift - 有没有办法改变 UITabBar 或 UITabBarItem 中的图像位置?
- python - AWS - 打印 lambda 启动的实例的详细信息
- php - laravel 应用程序中的本地化问题
- docker - 无法拉取 docker tomcat 镜像
- javascript - Electron 退出而不发出 render-process-gone 事件
- python - seaborn 没有在定义的子图中绘制
- java - Java:递归函数不生成集合的幂集
- java - 设计和解决问题 - Spring Boot with Kafka Application