【问题标题】:Deno: How to handle exceptionsDeno:如何处理异常
【发布时间】:2020-11-18 01:02:38
【问题描述】:

在nodejs中,我们可以这样处理异常:

process.on('uncaughtException', (err, origin) => {
  fs.writeSync(
    process.stderr.fd,
    `Caught exception: ${err}\n` +
    `Exception origin: ${origin}`
  );
});

setTimeout(() => {
  console.log('This will still run.');
}, 500);

// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');

deno 的替代品是什么? 我知道有 window.onunload,但它不处理错误

【问题讨论】:

    标签: node.js typescript exception deno


    【解决方案1】:

    Deno 总是死于未捕获的异常是一种设计选择(实际上是核心选择)。您不能为您的错误放置一个全局处理程序,因为有时您的异常可能是不可恢复的,并且可能会导致改变应用程序整体状态的副作用,总而言之,未处理的异常处理程序意味着问题。到目前为止,NodeJS 不鼓励对异常进行全局处理,因此将来也不要在该平台上依赖这种代码。

    话虽如此,如何处理拒绝? try/catch/finally 用于同步代码。 .then/.catch/.finally 用于异步代码。

    编辑:您可以使用的一个有趣的资源是unhandledRejection 事件,它是一个用于实现各种清理的事件,意味着关闭打开的连接、释放资源、关闭文件等。这不会t 阻止异常终止程序,但会给您空间以防止对程序终止产生二次影响。

    https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event

    【讨论】:

    • 但是,如何创建一个即使在异常情况下也能运行的进程结束脚本?
    • @Storm7953 您可以为此目的使用 unhandledRejection 事件。我更新了我的答案,对此进行了更详细的解释
    • 遗憾的是,它似乎还没有实现。 github.com/denoland/deno/issues/7013 编辑:甚至看起来它可能永远不会实现......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2013-08-02
    • 2019-04-25
    相关资源
    最近更新 更多