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

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

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

解决方法:

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

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

Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

promises中的错误处理不是可选的,应该与try … catch相同.每一个有机会被拒绝的承诺都应该与catch联系在一起.在异步… await或co的情况下,.catch与try … catch相同.

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

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也可以扩展为使用第三方日志服务.

相关文章

最后的控制台返回空数组.控制台在ids.map函数完成之前运行va...
我正在尝试将rxJava与我已经知道的内容联系起来,特别是来自J...
config.jsconstconfig={base_url_api:"https://douban....
我正在阅读MDN中的javascript,并且遇到了这个谈论承诺并且不...
config.jsconstconfig={base_url_api:"https://douban....
这是我的代码main.cpp:#include<string>#include<...