从异步讲到回调函数

ops/2025/3/14 9:02:57/

在讲接下来的要点之前,我们必须理解两个名词:同步和异步。

所谓同步,指的是协同步调。既然叫协同,所以至少要有2个以上的事物存在。协同的结果就是:多个事物不能同时进行,必须一个一个的来,上一个事物结束后,下一个事物才开始。比如,先更新代码,然后再编译,接着再打包。这些操作由于后一步要使用上一步的结果,所以只能按照这种顺序一个一个的执行。这就是同步。

所谓异步,就是步调各异。既然是各异,那就是都不相同。所以结果就是:多个事物可以你进行你的、我进行我的,谁都不用管谁,所有的事物都在同时进行中。

一言以蔽之,同步就是多个事物不能同时开工,异步就是多个事物可以同时开工。

🆗,当理解好了这两个名词之后,我们就可以继续往下看了。

接下来我们讲讲回调。

回调的本质就是“将一个函数作为参数传递给另一个函数,并在适当的时间调用这个函数。它通过函数间的调用关系来实现解耦”。

比如现在有一个方法A和B,这两个方法没有任何的联系。当你使用回调,即B(A)的时候,就可以使得这两个方法有联系,还可以在异步的场景下确保方法的执行顺序。同时,B还可以决定什么时候调用A,以及A的执行结果如何影响B的后续逻辑。

我们以一个例子来体会一下,这是发生在我工作中的真实场景。我现在想调用后端的getGoodsById,然后通过getGoodsById的返回结果来更新newData的内容。我一开始是这样写的:

这样的写法是错误的,因为类似于调用后端接口的代码都不是这样子写的,我看了一下网上,正确的写法应该是这样的:

这样子就可以正确的调用接口获取数据了。但是这样问题出来了,大家有没有想过这个方法的执行过程是什么样的?在 getGoodsById 调用后,return newData 会立即执行,而 getGoodsById 的异步操作还未完成。这会导致返回的数据 newData 并未包含从接口返回的更新内容。这就是我们一直说的异步问题。

那我们有什么思路解决异步问题呢?可以将 return 的逻辑放在异步操作完成后执行就好了。卧槽,那不就是回调函数吗?所以我们的思路就是通过给 subTableChange 添加一个回调参数 callback,在异步操作完成后调用这个回调函数,并将更新后的 newData 作为参数传递给它。

当调用 subTableChange 时,需要传入一个回调函数来处理更新后的数据。回调函数是这样的:

subTableChange 方法的思路是:如果 item.key 不是 "materialId",直接调用回调函数 callback,将 newData 返回。如果 item.key 是 "materialId",调用接口 getGoodsById。当接口返回数据后,更新 newData。调用回调函数 callback,将更新后的 newData 返回。


http://www.ppmy.cn/ops/165624.html

相关文章

给AI编程泼一盆冷水

AI确实扩大了普通人的能力边界,但是如果你连自己想要什么都描述不清楚,更不知道AI干了什么,你最好停下来认真的学习一下。 AI并没有消除认知差距,而是让人与人的认知差距急剧拉大了。 一、效率提升与隐性成本的博弈 AI编程工具如…

React 常用 Hooks 详细解析

React Hooks 是 React 16.8 引入的核心特性,允许在函数组件中使用状态、生命周期等特性,替代类组件的复杂逻辑。以下是常用 Hooks 的详细解析及最佳实践: 1. useState:状态管理 用途:在函数组件中定义和更新局部状态。…

鸿蒙开发者社区资源的重要性

鸿蒙系统,作为华为公司自主研发的操作系统,旨在为各类智能设备提供统一的平台。它不仅支持手机、平板电脑等移动设备,还涵盖了物联网(IoT)设备和其他智能家居产品。鸿蒙系统的开发环境和工具链对于开发者来说至关重要&…

《又是二叉树?递归与回溯的经典应用》

“ 我喜欢晴天,你恰好是最好的太阳” 226.翻转二叉树 力扣题目链接(opens new window) 翻转一棵二叉树。 这道题我们可以通过递归法解决,我们只要递归的把每一个节点的左右孩子反转一下就能解决了。 代码如下: var invertTree function(ro…

如何通过数据分析提升美容院顾客复购率

在美容行业,顾客的复购率和流失率是衡量一家美容院经营状况的重要指标。然而,许多美容院在管理顾客关系时,常常面临复购率低、流失率高、数据统计困难等问题。根据《美容行业顾客行为分析》期刊的研究,超过60%的美容院在顾客关系管…

MySQL数据库操作

目录 SQL语句 1、SQL的背景 2、SQL的概念 SQL的分类 SQL的书写规范 MySQL数据库 1、MySQL数据库的编码 (1)utf8和utf8mb4的区别 (2)MySQL的字符集 (3)MySQL默认编码为 latin1 ,如何更改…

本地部署 DeepSeek R1 的几种常见方法

本地部署 DeepSeek R1 的几种常见方法 使用 Ollama 部署使用量化模型部署使用 Docker 部署(推荐)硬件与性能要求其他工具 使用 Ollama 部署 安装 Ollama:访问 Ollama 官网,根据系统类型下载并安装。启动 Ollama:安装完…

stm32中分析UART中IDLE,RXNE,TC,TXE这些标志位的作用

下面将基于 STM32 标准库,结合之前提到的不同应用场景,给出使用 TXE、TC、IDLE 和 RXNE 标志位的代码示例及分析。 1. 连续数据发送(使用 TXE) 应用场景 向外部设备连续发送大量数据,如向显示屏发送显示数据、向传感…