【问题标题】:Node - Not able to catch error thrown in callback function节点 - 无法捕获回调函数中引发的错误
【发布时间】:2021-03-28 14:38:34
【问题描述】:

我很高兴使用一个回调函数,当我向它回调错误时会抛出一个错误,它看起来像下面这样,其中barCallback 是我无法编辑的第 3 方包:

var barCallback = function(data) {
  if (data === 'error') {
  throw Error('this is an error');
  }
};

var foo = function(callback) {
  callback('error', null);
};

foo(barCallback).then(console.log('Success')).catch('Failure!');

我得到:

    throw Error('this is an error');
    ^

Error: this is an error

如果我用 throw 而不是回调来抛出错误,我会得到相同的结果,但是

如何发现错误?我尝试过 try-catch,但这不适用于回调函数。

【问题讨论】:

  • 你有没有想过这个问题?我现在在回调和抛出错误对象时遇到了同样的问题。

标签: node.js error-handling callback


【解决方案1】:

您在同步函数上使用Promise 方法,这就是它不起作用的原因。 .then().catch() 的参数也应该是一个函数,而不是一个表达式。这是符合您期望的代码:

var barCallback = function (data) {
  if (data === 'error') {
    throw Error('this is an error');
  }
};

var foo = async function (callback) {
  return callback('error', null);
};

foo(barCallback)
  .then(() => console.log('Success'))
  .catch(() => console.log('Failure!'));

请注意,foo 现在是一个async 函数——因此它返回一个Promise——这样您就可以在主函数中调用.then().catch()。 另请注意,then()catch() 的参数是函数。

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2017-03-04
    • 2020-06-17
    • 1970-01-01
    • 2021-09-30
    • 2019-08-26
    相关资源
    最近更新 更多