我不想为我使用的每个 promise 键入 .catch。如果不这样做,由 promise 引起的错误将毫无帮助。
纯粹为了这个目的而使用像 bluebird 这样的整个库让我感到不舒服。
最佳答案
对于开发过程中的错误跟踪,V8(最近的 Node.js 和 Chrome 版本)已经得到了 unhandledRejection
(Node.js) 和 unhandledrejection
(Chrome) 默认事件监听器,这会导致 Node.js 中的 UnhandledPromiseRejectionWarning
警告和 Chrome 中的 Uncaught (in promise)
错误。
Node 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.
promise 中的错误处理不是可选的,应该与 try...catch
同等对待。每个有可能被拒绝的 promise 都应该与 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
也可以扩展为使用第三方日志记录服务。
关于javascript - 防止 ES6 promise 吞下错误(不使用 .catch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569327/