gpt4 book ai didi

Node.js: Node 是否总是在退出之前等待 setTimeout() 完成?

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

考虑:

node -e "setTimeout(function() {console.log('abc'); }, 2000);"

这实际上会在程序退出前等待超时触发。

我基本上想知道这是否意味着该 Node 打算在退出之前等待所有超时完成。

这是我的情况。我的客户有一个 node.js 服务器,他将使用快捷方式图标从 Windows 运行。如果 Node 应用程序遇到异常情况,它通常会立即退出,没有留下足够的时间在控制台中查看错误是什么,这很糟糕。

我的做法是用一个try catch来包装整个程序,所以现在它看起来像这样: try { (function () { ... })(); } catch (e) { console.log("异常捕获:", e); },当然这也会导致程序立即退出。

所以在这一点上,我想留出大约 10 秒的时间,让用户在异常退出之前查看或截屏该异常。

我认为我应该通过 npm 模块使用阻塞 sleep(),但我在测试中发现设置超时似乎也有效。 (即,如果内置的东西有效,为什么还要打扰模块?)我想这意义不大,但我只是好奇它是否在某处指定, Node 实际上会在退出前等待所有超时完成,所以我可以放心地这样做。

最佳答案

一般来说,node 会在正常退出之前等待所有超时触发。调用 process.exit() 将在超时前退出。

详情是libuv的一部分,但文档对此做了模糊的评论:

http://nodejs.org/api/all.html#all_ref

you can call ref() to explicitly request the timer hold the program open

将所有事实放在一起,setTimeout 默认情况下旨在保持事件循环打开(因此如果这是唯一未决的事情,程序将等待)。您可以通过编程方式禁用或重新启用该行为。

关于Node.js: Node 是否总是在退出之前等待 setTimeout() 完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18050095/

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