gpt4 book ai didi

node.js - 如果 Promise 永远运行,Node.JS 会发生什么?

转载 作者:行者123 更新时间:2023-12-04 07:16:01 26 4
gpt4 key购买 nike

假设我们有这个错误的功能:

async function buggy() {
while(true) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
如果你在 NodeJS 的某个地方调用它,它会永久影响服务器性能吗?
如果是这样,是否总是为所有不受信任的 promise 设置一个像这样的故障安全机制会更好:
new Promise((resolve, reject) => {
buggy().then(() => resolve);
setTimeout(reject, 10000);
};

最佳答案

在 promise 解析状态依赖于永不结束的外部资源/计时器(无限作为持续时间)的情况下,建议的故障安全将起作用并且服务器性能不会受到太大影响。

// this won’t stuck and the fail-safe will work
// (ignore the timer not being cleaned)
function buggy() {
return new Promise(resolve => setTimeout(resolve, Infinity));
}
否则(如果 promise 是完全同步的,即解析依赖于永不结束的无限循环)拒绝函数将永远不会被调用,因为事件循环被卡住,这将卡住服务器。
// The fail-safe wouldn’t work and the server is stuck
async function buggy() {
while(true);
}
编辑:
正如 @Vlaz 所指出的,以防 buggy 函数类似于:
async function buggy() {
while(true) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
故障安全将起作用并且服务器不会卡住。

关于node.js - 如果 Promise 永远运行,Node.JS 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68754128/

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