当前位置: 首页 > news >正文

解释为什么fetch(JavaScript)无法将读取的数据存入外部变量

(一)问题描述

      你可能会遇到这样的情况:在fetch之外创建变量,将fetch获取到的数据赋值给这个变量以便在fetch外使用,但在使用这个变量的时候发现值是空的,这是为什么呢?

(二)同步和异步 

原因很简单:fetch是异步的

那么什么是同步什么是异步呢?简单来说,同步和异步中任务执行的顺序不同:同步是指任务按顺序执行,一个任务完成后再开始下一个任务异步是指任务可以独立执行,一个任务不需要等待另一个任务完成,可以通过回调、事件或通知来获取结果。

对于这段代码:

let obj=[]//定义objfetch("XXX")//利用fetch获取数据.then((res) => res.text()).then((data) => {......console.log("获取数据");obj.push(XXX);//为obj赋值......}
console.log("写在获取数据之后的代码")

假设fetch是同步的,那么执行的顺序就是定义obj->获取数据并放入obj->在fetch外使用obj,控制台输出的顺序就是"获取数据”->"写在获取数据之后的代码“。但实际是fetch是异步的,fetch内的代码段可以独立执行,整个代码执行的顺序是(1)定义obj->在fetch外使用obj(2)fetch获取数据二者同步进行,那么fetch外使用obj时,数据获取和obj的赋值还没有完成!实际控制台输出的顺序是”写在获取数据之后的代码“->"获取数据”!

(三) 解决办法

1. 使用async和await来确保在使用变量之前数据已经被获取

2. 将需要使用数据的代码放入fetch的回调函数内部或者在数据获取完成后的回调中(也就是.then()中)

http://www.lryc.cn/news/511159.html

相关文章:

  • Windows Subsystem for Linux (WSL)
  • Go的Slice如何扩容
  • 使用云计算开发App 有哪些坑需要避免
  • ARM 架构--通用寄存器状态寄存器控制寄存器特殊用途寄存器
  • 最新SQL Server 2022保姆级安装教程【附安装包】
  • 学习C++:运算符
  • pdf有密码,如何实现pdf转换word?
  • AI发展新态势:从技术突破到安全隐忧
  • 王佩丰24节Excel学习笔记——第二十二讲:制作甘特图与动态甘特图
  • 若依框架之简历pdf文档预览功能
  • 酷瓜云课堂(内网版)v1.1.8 发布,局域网在线学习平台方案
  • python语音机器人(青云客免费api)
  • 使用ArcGIS/ArcGIS pro绘制六边形/三角形/菱形渔网图
  • 5.系统学习-PyTorch与多层感知机
  • AIGC与虚拟身份及元宇宙的未来:虚拟人物创作与智能交互
  • 基于大模型LLM 应用方案
  • 实用技巧:关于 AD修改原理图库如何同步更新到有原理图 的解决方法
  • 区块链平台安全属性解释
  • 1228作业
  • Machine-learning the skill of mutual fund managers
  • Windows下Python+PyCharm的安装步骤及PyCharm的使用
  • Anaconda+PyTorch(CPU版)安装
  • 第 28 章 - ES 源码篇 - Elasticsearch 启动与插件加载机制解析
  • 机床数据采集网关在某机械制造企业的应用
  • 美团Android开发200道面试题及参考答案(上)
  • MQTT协议的应用场景及特点和常见的概念03
  • 电脑缺失sxs.dll文件要怎么解决?
  • 数据处的存储与处理——添加数组
  • 24-12-28-pytorch深度学习CUDA的GPU加速环境配置步骤
  • YOLO系列正传(五)YOLOv4论文精解(上):从CSPNet、SPP、PANet到CSPDarknet-53