Skip to content

scopsy/await-to-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

59811c1 · May 29, 2022

History

43 Commits
Dec 19, 2016
Oct 1, 2017
Oct 4, 2021
Nov 23, 2018
Oct 1, 2017
Oct 1, 2017
Oct 1, 2017
Oct 1, 2017
Oct 1, 2017
May 29, 2022
Mar 9, 2021
Mar 9, 2021
Oct 1, 2017
Oct 1, 2017
Nov 23, 2018

Repository files navigation

await-to-js

NPM version Downloads

Async await wrapper for easy error handling

Supported by:
The open-source notification infrastructure

Pre-requisites

You need to use Node 7.6 (or later) or an ES7 transpiler in order to use async/await functionality. You can use babel or typescript for that.

Install

npm i await-to-js --save

Usage

import to from 'await-to-js';
// If you use CommonJS (i.e NodeJS environment), it should be:
// const to = require('await-to-js').default;

async function asyncTaskWithCb(cb) {
     let err, user, savedTask, notification;

     [ err, user ] = await to(UserModel.findById(1));
     if(!user) return cb('No user found');

     [ err, savedTask ] = await to(TaskModel({userId: user.id, name: 'Demo Task'}));
     if(err) return cb('Error occurred while saving task');

    if(user.notificationsEnabled) {
       [ err ] = await to(NotificationService.sendNotification(user.id, 'Task Created'));
       if(err) return cb('Error while sending notification');
    }

    if(savedTask.assignedUser.id !== user.id) {
       [ err, notification ] = await to(NotificationService.sendNotification(savedTask.assignedUser.id, 'Task was created for you'));
       if(err) return cb('Error while sending notification');
    }

    cb(null, savedTask);
}

async function asyncFunctionWithThrow() {
  const [err, user] = await to(UserModel.findById(1));
  if (!user) throw new Error('User not found');
  
}

TypeScript usage

interface ServerResponse {
  test: number;
}

const p = Promise.resolve({test: 123});

const [err, data] = await to<ServerResponse>(p);
console.log(data.test);

License

MIT © Dima Grossman && Tomer Barnea