使用try / catch扩展第三方功能

时间:2016-06-07 18:14:03

标签: javascript

我正在尝试扩展使用try / catch的第三方函数,因此如果出现错误,我可以在内部进行记录。我似乎无法扩展或原型化函数来记录错误,有没有人有这方面的例子?

googletag.cmd.push = function(a) {
    try {
        for (var b = sa(), c = 0; c < arguments.length; ++c) try {
            ea(arguments[c]) && (arguments[c](), this.j++)
        } catch (d) {
            this.l++, b.error(Ta(String(d.message)))
        }
        b.info(Ua(String(this.j), String(this.l)));
        return this.j
    } catch (d) {
        // custom error logging.
        O(1001, d)
    }
}

2 个答案:

答案 0 :(得分:0)

纯粹通过javascript这是不可行的。

最简单的解决方案是使用自定义实现覆盖该函数,除了日志记录语句之外,该函数是相同的。

如果您需要为许多第三方功能执行此操作,我建议您通过AST查看codemods转换。

答案 1 :(得分:0)

如果该功能没有抑制错误并且它正在冒出功能,你应该可以捕获它。

import test from 'ava';
import sinon from 'sinon';

import passwordModule from './password';

test('verify - should verify password', function * (t) {
  const password = 'test-password';
  const salt = null;
  const hash = 'my-hash';

  const hashStub = sinon.stub(passwordModule, 'hash', (password, salt) => Promise.resolve({hash, salt}));

  const verified = yield passwordModule.verify(password, hash, salt);

  t.true(verified);

  hashStub.restore();
});