js异步使用数组push() shift()

js asynchronously using array push() shift()

我有两个间隔需要访问相同的数据。 因此,在一个时间间隔内,我想将一个元素 push() 到数组,然后在另一个时间间隔内,我想从数组中获取第一个元素,然后将其删除。

例如:

let array = [];
let count = 0;

setInterval( () => {
    array.push(count);
    count++;
}, 1000);

setInterval( () => {
    let data = array[0];
    array.shift();
    console.log("received data: "+data);
}, 1000);

这个输出是:

received data: 0
received data: 1
received data: 2
received data: 3
....

这是否也适用于更复杂的函数和更大的数组? 这会导致任何奇怪的行为吗?也许它可以同时移动和推动并弄乱阵列? 这是一个好方法吗?有没有更好的方法?

编辑:
我想这样做的原因。是因为我想从许多不同的 link 下载数据。所以在我的脚本中我调用了一个 download(link) 函数,但这会导致脚本同时尝试下载大量 link。所以我想创建一个缓冲区,以便脚本只能同时从 100 links 下载。
在脚本中,我想在任何我想要的地方调用 download(link) ,然后让一个时间间隔负责同时只下载 100 links。所以它从缓冲区中删除 100 links 并下载它们。当脚本将新的 link 推送到同一个数组时。

我主要担心的是,当我执行 shift() 时,数组会以某种方式自行重组。 js 可能会尝试在此重组阶段之间进行 push() 吗?或者js会不会在shift()完成之前不对数组做任何数组操作?

将链接异步推送到数组然后在单独的异步任务中将它们从数组中删除的一般想法很好,它会起作用。

My main concern is that while i am doing a shift() the array will reorganize itself somehow. Might js try to make a push() in between this reorganization phase? Or will js not do any array operations on the array until shift() is completed?

Javascript 是单线程的,所以这不是什么值得担心的事情 - 如果一个时间间隔触发了一个执行某些操作的函数,那么该函数的同步操作(比如操作数组)将 运行 到结束之前任何其他间隔回调可以运行。

共享可变状态的问题是许多其他语言的问题,但 Javascript 不是,至少在大多数情况下是这样。