fetch请求赋值变量后外部调用显示undefined的原因咨询
问题原因:异步执行顺序导致变量未初始化
你遇到的问题核心是fetch是异步操作,代码执行顺序和你预期的不一致:
- 当
window.onload触发后,调用getMachineInfo()时,函数内部的fetch请求会被浏览器丢到后台处理,不会阻塞后续代码运行——也就是说,getMachineInfo()刚发起请求,浏览器就立刻执行后面的console.log语句了。 - 这时候fetch请求还在和服务器通信,
.then回调里的变量赋值逻辑完全没执行,你的全局变量machineTypeArr、typeLen等都还是初始的undefined,所以外部打印结果都是undefined。 - 只有当服务器返回数据、fetch请求完成后,
.then里的回调才会触发,这时候才会给全局变量赋值,所以在.then内部打印这些变量能得到正常值。
本质就是:你在变量还没被赋值的时候就去访问它了,因为异步请求的完成时间晚于你执行打印操作的时间。
内容的提问来源于stack exchange,提问作者Yangtze Smith
相关产品推荐
相关产品推荐

