From 7d8b38fd46533601a218f4d74ee7e092ea918cff Mon Sep 17 00:00:00 2001 From: Julian Dax Date: Tue, 28 Feb 2023 18:40:49 +0100 Subject: [PATCH] doc: improve example for Error.captureStackTrace() Change the `MyError` example so that instances of `MyError`are `instanceof Error` and also native errors when checked with `util.types.isNativeError()`. Co-authored-by: Ruben Bridgewater --- doc/api/errors.md | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/doc/api/errors.md b/doc/api/errors.md index 9139194719ade5..a0ab195ef49bd6 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -232,14 +232,27 @@ The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js -function MyError() { - Error.captureStackTrace(this, MyError); +function a() { + b(); } -// Without passing MyError to captureStackTrace, the MyError -// frame would show up in the .stack property. By passing -// the constructor, we omit that frame, and retain all frames below it. -new MyError().stack; +function b() { + c(); +} + +function c() { + // Create an error without stack trace to avoid calculating the stack trace twice. + const { stackTraceLimit } = Error; + Error.stackTraceLimit = 0; + const error = new Error(); + Error.stackTraceLimit = stackTraceLimit; + + // Capture the stack trace above function b + Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace + throw error; +} + +a(); ``` ### `Error.stackTraceLimit`