Men*_*tor 5 javascript node.js promise ecmascript-6 es6-promise
我不想为我使用的每个承诺键入.catch.如果不这样做,承诺造成的错误是非常无益的.
纯粹为了这个目的使用像蓝鸟这样的整个图书馆让我感到不舒服.
对于开发期间的错误跟踪,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);
Run Code Online (Sandbox Code Playgroud)
catchFn 可以扩展为使用第三方日志服务.
将处理程序添加到您的流程中以处理未处理的拒绝。您可以像这样处理一次它们,而不是一直复制粘贴 .catch 语句。
process.on( 'unhandledRejection', ( error, promise ) => {
console.log( 'UPR: ' + promise + ' with ' + error )
console.log( error.stack )
} )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |