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

vue js 回调函数 异步处理 为什么要 let that = this

1 异步就是开个事务(只有主线程 等主线程空闲),用that 值 做处理,然后返回处理结果,而that的值是开启事务那一刻的this的值.而在主线程处理的时候,this的一直在变化, that的值保留在那一刻

ps 或是将本obj 传递给其他的obj使用处理

ps 开启新事务或开启新子线程都是 在新的obj里处理数据,所以不是同一个obj 

-> 所以你不能在不是相同的obj 用this 指定另一个obj

js this 指的是什么_tenc1239的博客-CSDN博客

在 JavaScript 中,异步代码会在单独的线程中运行,
并且会在未来的某个时刻返回结果。在异步函数中,
this 的值可能会发生变化,因此我们需要在异步函数外部将 this 赋值给另一个变量 that,
以便我们在异步函数中能够访问对象的属性。当异步代码返回结果时,
我们可以使用回调函数来处理返回的结果。在回调函数中,
我们可以使用之前保存的 that 值来访问对象的属性。
回调函数确实可以用于异步或耗时的操作,但是它不是开启子线程的方式。
在 JavaScript 中,主线程是唯一的线程,我们无法创建子线程来执行代码。
当我们执行异步操作时,会将它们添加到事件队列中,并继续执行主线程中的其他任务。
当异步操作完成时,会将回调函数添加到事件队列中,等待主线程空闲时执行。所以说,回调函数的作用是允许我们在异步操作完成后执行一些回调任务,
而不需要在主线程中等待这些操作完成。这样可以使我们的程序更加高效。
抱歉,我之前的回答可能有误导性。JavaScript 中确实不支持多线程,
它是单线程的。当我们执行异步操作时,这些操作会被添加到事件队列中,
等待主线程空闲时执行。这并不是开启了一个子线程来执行异步操作,
而是利用了事件循环来实现异步编程。主线程会不断地从事件队列中取出任务执行,
这样就不会阻塞主线程,使程序更加高效。我希望这次能够更清楚地回答你的问题。
那 that= this 的目的就是让that等于this再创建异步事件时的值,
等待主线程空闲时 用这个值处理?是的,这是一种常见的解决异步编程中 this 指向丢失的问题的方式。
在 JavaScript 中,函数的执行环境是动态的,this 指向是根据函数的调用方式来确定的。
当函数被作为回调函数传递,且回调函数是在异步事件中被调用时,this 指向有可能会丢失。
为了保持 this 指向,我们可以将 this 保存在一个变量中,
这样在回调函数中使用这个变量即可保持正确的 this 指向。一般来说,
这个变量被命名为 that,也可以是其他的名字。在异步事件中,that 会等待主线程空闲时再被使用。

2 异步 但是没有在异步处理函数中 不用that = this

 async handleAnalysis(params) {this.logList.push(`数据分析: ${minDate} - ${maxDate}`)
}

3 异步在异步处理函数中 用that = this

 request.onsuccess = function (event) {that.logList.push(`数据获取成功 : ${key}`)
}

4 回调函数 用that = this ->回调函数的作用是允许我们在一个函数中处理一些异步或耗时的操作,而不需要等待它们完成

4.1 

var obj = {name: "obj",method: function() {// 在对象方法中,this 指向该对象console.log(this.name);  // 输出 "obj"var innerFunction = function() {// 在内部函数中,this 指向全局对象console.log(this.name);  // 输出 undefined}innerFunction();}
}
obj.method();

4.2 箭头函数

function doSomething(param1, param2, callback) {// some code here// 当操作完成时,调用回调函数,并将结果作为参数传递给回调函数callback(result);
}// 调用doSomething函数,传递一个箭头函数作为回调函数
doSomething(1, 2, result => {// 回调函数的处理逻辑
});

4.3

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

相关文章:

  • 前端面试:【算法与数据结构】常见数据结构解析
  • RTSP/Onvif视频服务器EasyNVR安防视频云服务平台出现崩溃并重启的情况解决方案
  • 软考高级系统架构设计师系列论文九十四:论计算机网络的安全性设计
  • jenkins Linux如何修改jenkins 默认的工作空间workspace
  • Mysql报错 mysqladmin flush-hosts
  • javaee idea创建maven项目,使用el和jstl
  • 同一个服务器发布两个前端(网站)
  • 部署常用指南
  • 4.5 TCP优化
  • pdf太大怎么压缩大小?这样压缩文件很简单
  • 【IMX6ULL驱动开发学习】09.Linux之I2C框架简介和驱动程序模板
  • 【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据
  • 基于亚马逊云科技服务,构建大语言模型问答知识库
  • SpingMVC拦截器-用户登录权限控制分析
  • MDTA模块(Restormer)
  • C++ 新特性 | C++ 11 | decltype 关键字
  • 2023国赛数学建模思路 - 案例:退火算法
  • ubuntu20.04 编译安装运行emqx
  • ARM linux ALSA 音频驱动开发方法
  • 设计模式二十三:模板方法模式(Template Method Pattern)
  • [Linux]进程状态
  • Python爬虫逆向实战案例(五)——YRX竞赛题第五题
  • js识别图片中的文字插件 tesseract.js
  • Linux设备驱动移植(设备数)
  • 【移动端开发】鸿蒙系统开发入门:代码示例与详解
  • Jenkins的流水线详解
  • DIFFEDIT-图像编辑论文解读
  • 【优选算法】—— 字符串匹配算法
  • Docker容器:docker consul的注册与发现及consul-template守护进程
  • Blazor 依赖注入妙用:巧设回调