Javascript 如果同时修改在节点js中循环的数组,会发生什么情况?

Javascript 如果同时修改在节点js中循环的数组,会发生什么情况?,javascript,arrays,node.js,loops,Javascript,Arrays,Node.js,Loops,我是NodeJS的新手,刚刚习惯了该语言的异步特性 我有一个函数,每60秒更新数组a中的值(从数据库中获取) 我还有一个处理用户请求的函数,在处理这些请求时,它使用a中的值(因此我循环a) 我想知道这种异步的东西是否会使我的应用程序崩溃 例如,如果我在强> a < /强>和抓取值的中间,但同时,60秒定时器命中并开始更新 a>强>中的值,会有什么不好的事情发生吗? 如果是这样的话,您有什么设计建议来避免这种情况吗 非常感谢您的帮助 这样做可能会遇到奇怪的bug。如果你在A的中间,A变得更短,它将

我是NodeJS的新手,刚刚习惯了该语言的异步特性

我有一个函数,每60秒更新数组a中的值(从数据库中获取)

我还有一个处理用户请求的函数,在处理这些请求时,它使用a中的值(因此我循环a

我想知道这种异步的东西是否会使我的应用程序崩溃

例如,如果我在<>强> a < /强>和抓取值的中间,但同时,60秒定时器命中并开始更新<强> a>强>中的值,会有什么不好的事情发生吗? 如果是这样的话,您有什么设计建议来避免这种情况吗


非常感谢您的帮助

这样做可能会遇到奇怪的bug。如果你在A的中间,A变得更短,它将终止循环。例如,假设A有30个元素。当您循环时,当您在索引16上时,它将更改为长度15。它不会继续循环。另一个例子。假设A的长度为2。当您完成第一个索引的内容时,当您转到第二个索引时,两个索引的值都会发生更改,然后第一个索引将被报告为旧值,第二个索引将被报告为新值。

这实际上取决于您的确切代码,因此如果不查看和理解您的确切代码,就无法提供具体答案

node.js中的Javascript是单线程的,因此,如果使用同步机制(如
.forEach()
for
循环)在数组中循环,则会启动所有异步调用,但在当前执行线程(包括通过数组的循环)完成之前,这些调用无法完成。因此,当您仍在循环时,任何异步结果都不会影响阵列

有一些不太传统的异步方式来遍历数组。如果您使用的是其中之一,我们必须查看您的实际代码,以便对您是否存在任何并发性问题发表意见

例如,如果我处于循环和捕获值的中间 但与此同时,60秒的计时器点击并开始更新 A中的值,会发生任何不好的事情吗


node.js是事件驱动的。这意味着当计时器准备启动时,它会将事件插入node.js事件队列。在当前运行的Javascript完成并且node.js引擎可以从事件队列中拉出下一个事件之前,不会处理该事件。因此,计时器永远不会中断当前正在运行的Javascript。

异步并不意味着多线程-因此,当您同步循环通过某个事件时,任何“事件”这将导致在同步代码完成之前不会运行的更改。如果在代码中包含特定的代码示例,您将得到更具体、更有意义的答案。并发性问题取决于确切的代码,不能仅通过文本描述来确定。