using-try-catch

Simplify the use of try-catch

Usage no npm install needed!

<script type="module">
  import usingTryCatch from 'https://cdn.skypack.dev/using-try-catch';
</script>

README

Using Try Catch

Simplify the use of try-catch. Avoid writing code that contains high scope decoupling with using-try-catch.

Main Branch Codacy Badge Coverage Status GitHub license GitHub issues GitHub stars CDN jsdelivr NPM Size Vulnerability

Edit admiring-sun-5qry6

Installation

$ npm add using-try-catch

// OR

$ yarn add using-try-catch

// OR

$ pnpm add using-try-catch

Examples

Typescript

import usingTryCatch from 'using-try-catch';

const example = async () => {
  const promise = new Promise((resolve) => resolve('exemple'));

  const result = await usingTryCatch(promise);
  console.log(result.data); // 'example'
};

example();

CommonJS

const usingTryCatch = require('using-try-catch');

const example = async () => {
  const promise = new Promise((resolve) => resolve('exemple'));

  const result = await usingTryCatch(promise);
  console.log(result.data); // 'example'
};

example();

Browser Examples

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta content="width=device-width, initial-scale=1" name="viewport">
    <title>Example using-try-catch</title>
  </head>
  <body>
    <h1>Example</h1>

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/using-try-catch@0.1.9/usingTryCatch.js"></script>
    <script>
      document.addEventListener('DOMContentLoaded', function loaded() {

        const example = async () => {
          const promise = new Promise((resolve) => resolve('exemple'));

          const result = await usingTryCatch(promise);
          console.log(result.data); // 'example'
        };
        
        example();
      });
    </script>
  </body>
</html>

Fetch Example

const https = require('https');
const { usingTryCatch } = require('using-try-catch');

const fetchDog = () => new Promise((resolve, reject) => {
  const options = {
    host: 'dog.ceo', //Xdog.ceo
    path: '/api/breeds/image/random',
    method: 'GET',
    port: 443
  };

  const request = https.request(options, (res) => {
    res.setEncoding('utf-8');

    let body = '';
    res.on('data', (chunk) => body += chunk);
    res.on('end', () => resolve(JSON.parse(body)));
    res.on('error', (error) => reject(error));
  });

  request.on('error', (error) => reject(`Error in request: ${error}`));
  request.end();
});

const fetchData = async () => {
  const { data, error } = await usingTryCatch(fetchDog());

  if (error) {
    return console.log('Error => ', error); // Error in request: Error: getaddrinfo ENOTFOUND Xdog.ceo
  }

  return console.log('Data => ', data); // { message: 'https://images.dog.ceo/breeds/terrier-fox/n02095314_3189.jpg', status: 'success' }
};

fetchData();

The problem

Several times we need to scope our async/await as follows:

const example = async () => {
  let promise1;
  let promise2;
  let err = false;

  try {
    promise1 = await new Promise((resolve) => resolve('exemple 1'));
  } catch {
    err = true;
  }

  try {
    promise2 = await new Promise((resolve) => resolve('exemple 2'));
  } catch {
    err = true;
  }

  if (err) {
    return 'Boom'
  }

  return {
    text1: promise1,
    text2: promise2
  }
};

example();

With using-try-catch we can simplify this operation as follows

const example = async () => {
  const promise1 = await usingTryCatch(await new Promise((resolve) => resolve('exemple 1')));
  const promise2 = await usingTryCatch(await new Promise((resolve) => resolve('exemple 2')));

  if (promise1.err || promise2.err) {
    return 'Boom';
  }

  return {
    text1: promise1.data,
    text2: promise2.data
  }
};

example();

NPM Statistics

NPM

License

Licensed under MIT