我正在使用Fetch API处理项目。我想使用fetch从文本文件中获取一些数据并将它们放入数组中,以便我可以使用它们。我不确定用什么代码来使变量全局化。我认为通过在fetch语句之外初始化变量,我可能能够以这种方式使用它。这就是我到目前为止所拥有的:
animals.txt
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?
}
})
index.js
#Lib requests
import requests
import bs4
fonte = requests.get('https://www.noticiasaominuto.com/')
soup = bs4.BeautifulSoup(fonte.text, 'lxml')
body = soup.body
for paragrafo in body.find_all('p', class_='article-thumb-text'):
print(paragrafo.text)
conteudo = paragrafo.text
id = requests.get('https://api.telegram.org/bot<TOKEN>/getUpdates')
chat_id = id.json()['result'][0]['message']['from']['id']
print(chat_id)
msg = requests.post('https://api.telegram.org/bot<TOKEN>/sendMessage', data = {'chat_id': chat_id ,'text' : conteudo})
答案 0 :(得分:2)
嗯,有一件事,你试图重新分配一个被禁止的const
声明。我希望您的代码能够正常运行,您必须将其更改为let
。然后,要使其全局化,请将其绑定到浏览器中的全局对象window
。
但是,异步请求的原则是您希望在执行某些操作之前等待数据到达,因此将fetch的结果放在全局范围内的用途非常有限,因为您希望能够知道数据何时已经到了。
为了做到这一点,您只需要在.then()
的{{1}}中执行任何操作。 几乎总是一种更好的方式来处理异步数据,而不是污染全局范围,并且有一个复杂的事件系统或超时检查特定全局变量的变化。
答案 1 :(得分:0)
这个问题的答案取决于你如何操纵数据。您是在手动控制台内执行代码还是在网页/脚本文件中执行代码?
如果您只是在控制台中执行代码,那么将数据分配给全局对象就可以了。我至少会打印一条消息,知道何时完成提取并且数据可供使用。
如果您将代码作为较大脚本的一部分执行,那么您需要在承诺链中继续您的代码,否则您将遇到时序问题。这是因为fetch是异步的,并且在结束请求之前数据将不可用。通常,最好将数据作为参数传递而不是使用全局对象,因为它使程序的流程更加明显。