具有异步/等待的节点 - 如何获取发生错误的特定行?

时间:2017-01-20 12:52:33

标签: node.js async-await pg-promise

我在节点中有一个如下所示的函数:

async someFlow() {
        try {
            func1();
            func2();
            await getSomeData();
            func3();
        }
        catch (e) {
            sentryIo.captureException(e);
        }
    }

和getSomeData()看起来像这样:

async getSomeData() {
        //... some code
        await pgPromise.one('select * from some bad syntax') // line 351!!
        //... some code
    }

当pgPromise(用于与PostgreSQL交谈的lib)抛出错误时,错误的堆栈跟踪仅包含发生错误的pgPromise lib的内部行号

因此,当捕获错误并将其记录到Sentry.io服务时,我无法知道错误的确切行。

我该如何做到这一点,以便错误能够控制堆栈跟踪,告诉我第351行中发生的错误

1 个答案:

答案 0 :(得分:2)

我最终做了:

var bb = require('bluebird');
bb.config({longStackTraces: true});
var pgp = require('pg-promise')({promiseLib: bb});

给了我完整的承诺堆栈跟踪。

pg-promise的作者的备忘录:

确保在投入生产时禁用长堆栈跟踪,因为有时这些会对性能和内存消耗产生巨大影响。