An easy inline error handling wrapper for async promises and syncronous functions
π‘ Inspired by await-to-js
const { try_ } = require('try-inline'); let err, data; // async [err, data] = await try_(somePromise()); if (err) process.exit(1); console.log(data); // normal function [err, data] = try_(() => someFunction()); if (err) process.exit(1); console.log(data);
$ npm install try-inline
- Inline error catching
- Configurable error logging
- Error object patching
- on a execution fail, the returned error object includes its ErrorString
- Labeling executions for better debugging
- Filtering error results for specified key-paths
(documentation coming soon)
- only show specific keys from the error object
Wraps an execution safely. The default TryInline instance.
executionObj- the object to execute. Can be a promise or a callback with a syncronous function.logOptionsString- optional (you can leave it empty) option string for the logger.- Format:
"(logLevel:)labelString"logLevel- method used from logger. The default logger is the JavaScript global "console". So the available values are:info, log, warn, error. Defaults toerror. When you want to use your own logger, take a look at creating your own TryInline custom instance.labelString- optional label attached to the error log message.
- Example:
"warn:HTTP_TIMEOUT"-> Logger gets the 'warn' log-level and the label string 'HTTP_TIMEOUT'
- Format:
options- optional object with:errData- additional error information (assinged toerror.ErrorData).
Returns an array with two values:
err- the error obejct. WhenexecutionObjthrows an error, it is assigned toerr. Otherwiseerris null.data- returned value fromexecutionObj. On error it gets undefined.
const { try_ } = require('try-inline'); let [err, data] = await try_(readFilePromise('lorem.txt'), 'warn:READ_FILE_ERR', { errData: "Safely ignore the error. The lorem file is optional." } }); // array destructuring is awesome! let [err] = ... // just get the error obj let [, data] = ... // only get the data obj
Creates a custom TryInline instance with specified options.
options- required object where:Logger- custom error handling function. It getserror, level, labelpassed as arguments.DefaultLogLevel- set the default level for your Logger.
Returns a custom try_ instance with attached Logger.
const TryInline = require('try-inline'); const try_ = new TryInline({ Logger: function(error, level, label) { const logMessage = label ? `(${label}) ${error}` : error; console[level](logMessage); }, DefaultLogLevel: 'debug' });
Do not always trust automatic semi-colon insertion (ASI) in JavaScript, when not using semi-colons! Be careful when assigning the output variables by destructuring the returned array!
When you want to be 100% safe, then put a semi-colon in front of the destructuring statement:
;[err, data] = await try_(somePromise())