当前位置:  开发笔记 > 编程语言 > 正文

防止ES6承诺吞咽错误(不使用.catch)

如何解决《防止ES6承诺吞咽错误(不使用.catch)》经验,为你挑选了1个好方法。

我不想为我使用的每个承诺键入.catch.如果不这样做,承诺造成的错误是非常无益的.

纯粹为了这个目的使用像蓝鸟这样的整个图书馆让我感到不舒服.



1> Estus Flask..:

对于开发期间的错误跟踪,V8(最近的Node.js和Chrome版本)默认已经有unhandledRejection(Node.js)和unhandledrejection(Chrome)事件监听器,这会导致UnhandledPromiseRejectionWarningNode.js 中的警告和Uncaught (in promise)Chrome中的错误.

节点7中的弃用警告声明将在以后的Node.js版本中进行更改:

未处理的承诺拒绝已被弃用.将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程.

promises中的错误处理不是可选的,应该与之相提并论try...catch.每一个有机会被拒绝的承诺都应该被束缚catch.在async...await或的情况下co,.catch是相同的try...catch.

如果错误应该被忽略,则必须明确捕获它.如果错误处理需要在整个应用程序中保持一致并符合日志级别,则可以通过设计提供.例如,使用传统debug包装:

const debug = require('debug');

function catchFn(err, ns = 'myapp:caughtPromises') {
    debug(ns)(err);
}

function catchPromise(promise, ns) {
    promise.catch(err => catchFn(err, ns));
    return promise;
}

...

try {
  await promise;
} catch (err) {
  catchFn(err);
}

// or
catchPromise(promise);

// or
promise.catch(catchFn);

catchFn 可以扩展为使用第三方日志服务.


这似乎不是OP所要求的.我认为OP在更高级别有一个`.catch()`因此拒绝并不是未处理的.在我看来,他们抱怨说如果不使用像Bluebird这样的堆栈跟踪来判断最初的拒绝是多么困难.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有