gpt4 book ai didi

javascript - 防止 ES6 promise 吞下错误(不使用 .catch)

转载 作者:搜寻专家 更新时间:2023-10-31 23:03:59 24 4
gpt4 key购买 nike

我不想为我使用的每个 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...awaitco 的情况下,.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com