don't catch callback errors

in the previous commit, errors within `callback` would have bubbled up and called `callback` twice.

also added `try-catch` to another method that calls `JSON.parse`