Skip to main content

[Node.js] Why do profiler function names show as "fulfilled" or "__awaiter"?

Issue

I use Profiling on a Node.js / TypeScript backend. In the profiler, many frames show as "fulfilled" or "__awaiter" instead of my application function names.

Applies To

  • All SaaS Customers and Self-Hosted Users

  • @sentry/node with @sentry/profiling-node

  • Node.js / Express / TypeScript backends

  • Profiling

Resolution

Those frame names are expected for async TypeScript/Node code. They are not missing symbols from your app source tree.

  • "__awaiter" comes from TypeScript’s async/await helper when the compiler downlevels async functions.

  • "fulfilled" comes from V8’s Promise / async scheduling. Async work is not one continuous stack, so samples often disconnect at that frame.

What to do:

  1. Use the aggregate flamegraph and focus on frames with a high sample count. Optimizing those functions still improves runtime, even when the chronological async path is hard to read.

  2. Upload source maps for your Node build so remaining frames map back to your TypeScript sources where possible. See the Node.js source maps documentation.

  3. If you see heavy "__awaiter" noise, check your TypeScript target. Compiling to a target that keeps native async/await (for example ES2017 or newer) reduces __awaiter helpers. This does not remove "fulfilled" frames.

This is a platform limitation, not a misconfigured Sentry project. For more background, see the Profiling discussion on GitHub issue 73234. For setup, see Node.js Profiling.

Did this answer your question?