costack

1.0.2 • Public • Published

costack

What is it?

If you use co or koa you have a lot of code places where you call async functions with yield

yield sequelize.query('SELECT ...');
yield fs.readFileAsync('/foo/bar')

and if that function fails you will get incorrect error stacktrace like

{ Error: ENOENT: no such file or directory, open 'foo/bar'
     at Error (native) errno: -2, code: 'ENOENT', syscall: 'open', path: 'foo/bar' }

and you really don't know where it is happen.

Costack gives you full error stacktrace

Install

npm i costack

How to use

just require costack to global.Promise in top of your app

global.Promise = require('costack');

Example

"use strict";
global.Promise = require('costack');
const co = require('co');
 
function dbQuery(sql) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject(new Error('Incorrect sql query'));
        }, 100);
    });
}
 
function* find(params) {
    return yield dbQuery('SELECT * FROM table', params);
}
 
function* findById(id) {
    return yield* find({id: id});
}
 
co(function *() {
    const res = yield* findById(1);
}).catch(err => console.error(err));

Stacktrace without costack

Error: Incorrect sql query
    at Timeout.setTimeout (~/Dev/costack/examples/db.js:11:20)

With costack

Error: Incorrect sql query
    at Timeout.setTimeout (~/Dev/costack/examples/db.js:11:20)
----------------
    at dbQuery (~/Dev/costack/examples/db.js:9:12)
    at find (~/Dev/costack/examples/db.js:17:18)
    at findById (~/Dev/costack/examples/db.js:22:19)
    at ~/Dev/costack/examples/db.js:27:24
----------------
    at Object.<anonymous> (~/Dev/costack/examples/db.js:26:1)

Dependencies (0)

    Dev Dependencies (0)

      Package Sidebar

      Install

      npm i costack

      Weekly Downloads

      1

      Version

      1.0.2

      License

      ISC

      Last publish

      Collaborators

      • cevek