Zone.js 在节点中的每个请求都不会过期,并且它的值存在于堆栈中

发布于 2025-01-09 10:16:06 字数 937 浏览 1 评论 0原文

我对express.js,node.js很陌生。在我们的应用程序中,我们使用 zone.js 库将 ttl 值存储在堆栈中。据我了解,该区域仅适用于将响应发送给最终用户后的每个请求。之后该区域就会消亡。

但在我身上发生的事情,它仍然存在。例如:

在第一个请求中,我使用 storeTtl 函数将 ttl 值存储为 150。后来在发送响应时,我尝试使用 getMinimumTtlVal 函数获取该值。作为响应,我得到 150,这是正确的,因为堆栈仅存在一个值,并且在调用发送 api 请求之前,它应该需要为空,但这种情况没有发生。

当我用 ttl 值 180 发出另一个请求并使用 storeTtl 函数存储 ttl 时,但是当我尝试获取 getMinimumTtlVal 函数中的值时,现在 satck 有两个值 (150,180)。由于 min 函数,它返回 150。

这里需要 Min 函数,因为在某些请求中我们多次调用 storeTtl 函数。我无法弄清楚这段代码有什么问题。

示例代码如下:

require('zone.js/dist/zone-node.js');

class TtlStore {

  storeTtl (ttl) {
    if (!Zone.current.ttlStore) {
      Zone.current.ttlStore = [];
    }
    Zone.current.ttlStore.push(ttl);
  }

  getMinimumTtlVal () {
    const minValue = Math.min(...Zone.current.ttlStore);
    if (isNaN(minValue) || !Number.isInteger(minValue)) {
      return 0;
    }
    return minValue;
  }
}

module.exports = TtlStore;

提前致谢

I am very new to express.js ,node.js . In our application, we are using the zone.js library to store the ttl value in the stack. As per my understanding the zone is only applicable to per request once the response is sent to end user. After that zone will die.

But what happen in my case, it will still exists. For an example:

In first request i have store ttl value to 150 using storeTtl function. and later while sending the response i tried to get the value using getMinimumTtlVal function. In response i am getting 150, that is correct because stack has only one value present and before calling the send api request, it should need to be empty but that is not happening.

When i made a another request with ttl value 180 and store ttl using storeTtl function but when i tried to get the value in getMinimumTtlVal function, now the satck has two value (150,180). Because of the min function, it is returning 150.

Min function is required here, because in some request we call the storeTtl function couple of times. I am not able to figure out, what is wrong in this code.

The sample code is below :

require('zone.js/dist/zone-node.js');

class TtlStore {

  storeTtl (ttl) {
    if (!Zone.current.ttlStore) {
      Zone.current.ttlStore = [];
    }
    Zone.current.ttlStore.push(ttl);
  }

  getMinimumTtlVal () {
    const minValue = Math.min(...Zone.current.ttlStore);
    if (isNaN(minValue) || !Number.isInteger(minValue)) {
      return 0;
    }
    return minValue;
  }
}

module.exports = TtlStore;

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦巷 2025-01-16 10:16:06

我从来没有使用过 zone.js。但我认为这是因为 Express 不会为每个请求创建一个新线程,而 zone.js 会保留线程的值。我发现了另一个关于nodejs线程逻辑的问题,这可能就是你的问题正在寻找。如果您希望每个请求清空 ttlStore,我可以建议您添加一个在请求结束时运行的中间件并清除存储。

I didn't ever use zone.js. But I think it is because of express doesn't create a new thread for each request and zone.js keeps values for a thread. I found another question about nodejs thread logic and this might be what you are looking for. If you want empte ttlStore per request, I can suggest you to add a middleware that runs end of the request and clear your storage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文