JavaScript获取API:全局访问局部变量

JavaScript获取API:全局访问局部变量,javascript,arrays,variables,global,fetch-api,Javascript,Arrays,Variables,Global,Fetch Api,我正在做一个使用fetchapi的项目。我想使用fetch从文本文件中获取一些数据,并将它们放入数组中,以便使用它们。我不确定使用什么代码使变量成为全局变量。我认为,通过在fetch语句之外初始化变量,我可能能够以这种方式使用它。以下是我目前掌握的情况: 动物.txt cat dog rabbit index.js const animalArray; fetch('animals.txt') .then((res) => res.text()) .then(data =

我正在做一个使用fetchapi的项目。我想使用fetch从文本文件中获取一些数据,并将它们放入数组中,以便使用它们。我不确定使用什么代码使变量成为全局变量。我认为,通过在fetch语句之外初始化变量,我可能能够以这种方式使用它。以下是我目前掌握的情况:

动物.txt

cat
dog
rabbit
index.js

const animalArray;
fetch('animals.txt')
    .then((res) => res.text())
    .then(data => {
      animalArray = data.split(/\r?\n/) //how can I access this outside of the fetch statement?
} 
})

这个问题的答案取决于您如何操作数据。您是在控制台中手动执行代码,还是在网页/脚本文件中执行代码

如果您只是在控制台中执行代码,那么可以将数据分配给全局对象。我至少会打印一条消息,以了解提取何时完成,数据何时可用


如果将代码作为较大脚本的一部分执行,则需要在承诺链中继续执行代码,否则会遇到计时问题。这是因为fetch是异步的,在完成请求之前,数据将不可用。一般来说,最好将数据作为参数传递,而不是使用全局对象,因为它使程序的流程更加明显。

首先,您尝试重新分配一个
常量
声明,这是禁止的。如果您希望代码正常工作,则必须将其更改为
let
。然后,要使其成为全局对象,请将其绑定到浏览器中的全局对象
window

但是,异步请求的原理是,您希望在执行某项操作之前等待数据到达,因此将获取结果放在全局范围内的用途非常有限,因为您希望能够知道数据何时到达


为了做到这一点,您只需在
fetch()
.then()
中执行任何操作。处理异步数据几乎总是有更好的方法,而不是污染全局范围,让复杂的事件或超时系统检查特定全局变量的更改。

简而言之,你不能。由于fetch是异步的,因此在
之外访问
animalArray
的任何代码都可能在fetch完成之前运行。任何依赖于提取结果的内容都必须直接或间接进入
。然后
。可能的重复只需将与它们一起工作的代码放入
然后
回调中即可。