为什么我在全局定义这个变量时没有定义它?(javascript,p5.js)

为什么我在全局定义这个变量时没有定义它?(javascript,p5.js),javascript,p5.js,Javascript,P5.js,我使用JS获取JSON,并使用p5.JS库(下面的源代码)根据其中的数据绘制画布和点。eliple()函数需要获取变量position,但该变量只能从console.log(“函数内部的位置”)所在的位置访问,不能全局访问 我的代码如下: 函数设置(){ createCanvas(400400); } var位置; 函数绘图(){ var promise=fetch(“http://api.open-notify.org/iss-now.json"); 背景(20,29,22); 承诺。然后

我使用JS获取JSON,并使用p5.JS库(下面的源代码)根据其中的数据绘制画布和点。
eliple()
函数需要获取变量
position
,但该变量只能从console.log(“函数内部的位置”)所在的位置访问,不能全局访问

我的代码如下:

函数设置(){
createCanvas(400400);
}
var位置;
函数绘图(){
var promise=fetch(“http://api.open-notify.org/iss-now.json");
背景(20,29,22);
承诺。然后(回复=>{
如果(response.status!==200){
console.log('看起来有问题。状态代码:'+
答复(现状);
返回;
}
response.json().then(数据=>{
window.position=数据;
})
.catch(错误=>{
console.log(错误消息);
})
console.log(“功能内的位置”);
setTimeout(函数(){
if(position.iss_position.经度和position.iss_position.latitude)
日志(“经度”+位置.iss_位置.经度);
控制台.log(“纬度”+位置.iss_位置.纬度);
},500);
})
翻译(180,180);
椭圆(parseFloat(window.position.iss_位置.经度),parseFloat(window.position.iss_位置.纬度),4,4);
}
试着把那些行

translate(180, 180);
ellipse(parseFloat(window.position.iss_position.longitude), parseFloat(window.position.iss_position.latitude), 4, 4);
在您的响应中。然后()


承诺是异步工作的,当您在承诺之外调用函数时,可能没有设置变量值。

是有意义的,对吗?AndI尝试过这个,但是出于某种原因,当我从里面调用椭圆()函数时,它似乎有很多缺陷,而不是在draw()作用域的外壳中调用它,你说的“非常缺陷”是什么意思?因为我不知道你什么时候想调用函数,我真的帮不了你。当你可以在内部使用它们时,为什么要在承诺之后调用它们呢?事实是,当端点被查询得太频繁时,我正在查询的服务可能会变得不稳定。我决定将帧速率降低很多(
setup()
函数中的
frameRate(1)
),现在它可以像charm一样工作。最后,指定一个低帧速率()(在我的例子中是1)成功了,但更好的方法是将请求包装在setTimer()中在不限制帧速率的情况下运行。您可能想看看哪个显示了您想要执行的操作。我们的想法是使用p5js函数,这将减轻使用承诺的工作量。正如医生所说,你也可以从中调用
loadJSON
,让事情变得更简单。这太完美了!Shiffman在查询同一个API,太棒了,这解决了我的问题当你想处理这个家伙的频道上经常有一个非常相关的视频,通常值得一看:)