首页 > 解决方案 > 从可能是异步的回调中捕获并返回错误

问题描述

我有这样的功能:

const x = y(callback);
x();

可以使用同步或异步回调调用它:

const a = y(() => 42);
const b = y(async () => Promise.resolve(42));

该函数y应该接受一个回调,它可以是同步的或异步的。是否可以从同步或异步回调中捕获抛出的错误?

我不能简单地将回调包装在try/catch

const y = (callback) => function () {
  try {
    return callback(...arguments);
  }
  catch (callbackError) {
    throw callbackError;
  }
};

因为这并没有捕捉到 Promise 抛出的错误。我不能只是将 a 链接.catch到回调上,因为它可能不是一个承诺。

我已经读过在调用它之前检查一个函数是否是一个承诺可能不是微不足道的/可能是不可能的

我不能调用它来检查它是否在将它链接catch到它之前检查它是否返回一个承诺,因为如果它抛出,则它还catch没有被链接到调用上

有没有办法从可能是也可能不是承诺的回调中捕获错误?


根据评论,我应该指定我不希望函数返回承诺。那是:

const a = y(() => { throw new Error(); })();
console.log(a instanceof Error);

const b = y(async () => { throw new Error(); })();
console.log(b instanceof Error);

const c = y(() => 42)();
console.log(c === 42);

const d = y(async () => Promise.resolve(42))();
console.log(d instanceof Promise);

应该都是真的。简单地说,我想返回一个错误或者结果

标签: javascriptasynchronousasync-awaitpromise

解决方案


异步函数也发出一个承诺,您可能会考虑将异步包装在一个承诺中,它在解析时发出值


推荐阅读