Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的fetch在第一次调用时返回错误,但在后续调用中却从未返回错误?_Javascript_Fetch Api - Fatal编程技术网

Javascript 为什么我的fetch在第一次调用时返回错误,但在后续调用中却从未返回错误?

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 =>

当我运行下面的程序时,第一次运行它时,我得到“UncaughtTypeError:无法读取未定义的属性“0”,但它在第二次以上运行正常。这是为什么?我如何避免

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赋值操作不是异步的。是的,只是为了清晰起见,这样做了,但你是对的,不需要。