javascript - 从可能是异步的回调中捕获并返回错误
问题描述
我有这样的功能:
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);
应该都是真的。简单地说,我想返回一个错误或者结果
解决方案
异步函数也发出一个承诺,您可能会考虑将异步包装在一个承诺中,它在解析时发出值
推荐阅读
- nginx - 在插件 'rate-limiting' 中使用 'X-Forwarded-For' 而不是 '$remote_ip'
- java - 尝试在 Head First Servlets 和 JSP 中重现示例时出现 NullPointerException
- c# - 控制台应用程序启动另一个进程环境变量不可访问
- events - READ 和 WRITE 的通用服务 - CQRS + DDD
- c++ - 仅在一定限度内释放 2D 指针数组的内存
- asp.net-mvc - 如何将我的发布方法分配给视图中的按钮
- android - 如何在设计评审中显示标题栏?
- node.js - npm start 时在 react-native 中给出错误
- python - 使用 Python 提取 JSON 文件中的嵌套项
- ionic-framework - 在ionic 3中将API数据从一个页面传递到另一个页面