在 javascript 中,如果 array.push() 和 array.shift() 异步触发,数组会被破坏吗?

问题描述

在 JavaScript 中,如果 array.push() 和 array.shift() 异步触发,数组会被破坏吗?

我正在使用一个数组来管理用户活动和在网页上花费的时间的跟踪。这些事件是异步创建的,并被推送到一个数组中。

数组像队列一样被处理。 array[0] 事件通过 HTTP POST 发送到主机数据库进行后期处理。成功时,数组被移动。

由于 array.push() 和 array.shift() 是异步调用的,这是否有可能破坏数组?

解决方法

由于 JavaScript 是单线程的,因此不可能同时发生两个函数调用。

请记住,不要将“异步”与“并行”混淆。

在 JavaScript 中,各种异步代码位在它们终止或移交给其他代码位之前专门运行。这是用于驱动一切的 JavaScript Event Loop 的全部部分。

现在,您可能会遇到这样一种情况:您的代码假设某些东西不会更改,而其他一些代码会更改它,但这本身并不是损坏,而只是做出错误假设。

>

编写 JavaScript 代码时面临的最大挑战不是意外损坏,因为您可能会遇到脱轨的多线程 C++ 代码,而是排序,例如让您的操作在正确的顺序。这就是 Promise 和 async 函数的巨大帮助之处。

如果您需要 push()shift() 之前发生,您必须使用 Promises 之类的工具来确保它们以正确的顺序发生。