Javascript 为什么我的fetch在第一次调用时返回错误,但在后续调用中却从未返回错误?
当我运行下面的程序时,第一次运行它时,我得到“UncaughtTypeError:无法读取未定义的属性“0”,但它在第二次以上运行正常。这是为什么?我如何避免Javascript 为什么我的fetch在第一次调用时返回错误,但在后续调用中却从未返回错误?,javascript,fetch-api,Javascript,Fetch Api,当我运行下面的程序时,第一次运行它时,我得到“UncaughtTypeError:无法读取未定义的属性“0”,但它在第二次以上运行正常。这是为什么?我如何避免 at HTMLButtonElement.newtexttotype function newtexttotype () { fetch('https://developer.nps.gov/api/v1/parks?stateCode=ca&api_key=APIKEYHERE') .then(response =>
at HTMLButtonElement.newtexttotype
function newtexttotype () {
fetch('https://developer.nps.gov/api/v1/parks?stateCode=ca&api_key=APIKEYHERE')
.then(response => response.json())
.then(data => {newtexthere = data.data});
console.log(newtexthere[0].description);
}
简单地说,从该URL获取数据是一个异步操作,需要一些时间才能完成 第一次运行代码时,在执行console.log时,数据尚未到达,数组尚未填充。 当您再次单击以运行它时,请求已完成,并且信息已存在 如何修复它? 我不知道您是否知道,但是您的
fetch
调用正在返回一个承诺,这是一种处理异步操作的方法。承诺公开了一个。然后,
方法,在该方法中,您可以放置承诺成功完成工作后将运行的代码
因此,您应该将console.log移动到。然后
,以确保在您登录时,您需要的信息已经存在
fetch('https://developer.nps.gov/api/v1/parks?stateCode=ca&api_key=APIKEYHERE')
.then(response => response.json())
.then(data => {newtexthere = data.data})
.then(()=> console.log(newtexthere[0].description));
在这种特定情况下,我认为OP只需要将控制台日志移动到第二个
then()
(.then(data=>{newtexthere=data.data;console.log(newtexthere[0].description)})
);不需要创建第三个then()
,因为newtexthere=data.data代码>赋值操作不是异步的。是的,只是为了清晰起见,这样做了,但你是对的,不需要。