当前位置: 首页 > 面试题库 >

如何使用node.js中的本机承诺全局处理异常?

唐兴发
2023-03-14
问题内容

我知道如何处理Promise中的特定错误,但有时我会看到一些类似以下的代码:

somePromise.then(function(response){
    otherAPI(JSON.parse(response));
});

有时,我收到无效的JSON,这会在JSON.parse throws
时导致无提示失败。总的来说,我必须记住.catch在代码中的每个promise中都添加一个处理程序,而当我不这样做时,我将无法找出我忘记了什么的地方。

如何在代码中找到这些被抑制的错误?


问题答案:

在现代NodeJS中

从io.js 1.4和Node 4.0.0开始,您可以使用以下process "unhandledRejection"事件:

process.on("unhandledRejection", function(reason, p){
    console.log("Unhandled", reason, p); // log all your errors, "unsuppressing" them.
    throw reason; // optional, in case you want to treat these as errors
});

这消除了未处理的拒绝问题以及在代码中跟踪它们的难度。

在较旧的NodeJS中

这些事件尚未反向移植到较旧的NodeJS版本,并且不太可能。您可以使用扩展了原生Promise
API(例如bluebird)的Promise库,该API
会触发与现代版本中相同的事件。

还值得一提的是,有多个userland
promise库提供未处理的拒绝检测功能,还有更多内容,例如bluebird(也有警告)和when。



 类似资料:
  • 问题内容: 版本7中的Node.js具有用于处理promise的async / await语法糖,现在在我的代码中经常出现以下警告: 不幸的是,没有提到丢失渔获物的那一行。有没有找到所有方法而不检查每个try / catch块的方法? 问题答案: 监听进程事件。

  • 问题内容: 作为节点程序员。我习惯于使用“ nodebacks”来处理代码中的错误: 编写该函数时,我可以执行以下操作: 我如何用promises处理这种错误? 问题答案: 经验法则 每当您对如何使用Promise有所疑问时,请考虑一下同步版本。 至少对我来说,这比第一个参数有时是的回调要干净得多。 promises方式几乎总是与问题的同步版本非常相似: 使用回调函数时,myFn看起来像什么: 使

  • 问题内容: 我一直在尝试发现如何将MongoDB与Node.js一起使用,并且在文档中似乎建议的方法是使用回调。现在,我知道这只是一个优先事项,但我真的更喜欢使用诺言。 问题是我没有找到如何在MongoDB中使用它们。确实,我已经尝试了以下方法: 结果是。在那种情况下,看来这不是这样做的方法。 有什么方法可以在Node内部使用带有promise而不是回调的mongo db吗? 问题答案: 您的方法

  • 统一错误处理 文档:https://eggjs.org/zh-cn/tutorials/restful.html 自定义一个异常基类 // app / exceptions / http_exceptions.js class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) {

  • 有没有办法在泽西进行全局异常处理?与其单个资源具有try/catch块,然后调用一些方法来清理所有要发回客户端的异常,我希望有一种方法可以将其放在实际调用资源的地方。这可能吗?如果是这样,怎么做? 相反,where会向Jersey servlet抛出某种Jersey配置的异常: 有: 其中异常将被抛出到我可以拦截并从那里调用的东西。 这实际上只是为了简化所有Jersey资源,并确保返回给客户机的异

  • Middleware: 全局异常处理 我们在岩浆的实例其实已经注意到了,compose 的连接方式,让我们有能力精确控制异常。 Koa中间件最终行为强依赖注册顺序,比如我们这里要引入的异常处理,必须在业务逻辑中间件前注册,才能捕获后续中间件中未捕获异常,回想一下我们的调度器实现的异常传递流程。 <?php class ExceptionHandler implements Middleware