「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
前言
作为一名开发人员,你是否经常看到下面这张图中的场景?
那你在看到这种图的时候是否会有这样的疑惑:为什么这个 res
对象不是 null
, 是谁给你赋的值呢,这个命名是我掉的方法啊?我没有在这边给它传值啊?下面我们就来以前端 axios
组件为引,深入探讨一下回调方法。
什么是回调
在计算机程序设计中,回调:是指通过函数参数将某一块可执行代码的引用传递到其他函数,供其他函数调用的编程思想。
其目的是允许 底层代码 调用在 高层定义的子程序 。
通俗的来讲就是:A 类中调用 B 类中的某个方法 C,然后 B 类中方法 C 在反过来调用 A 类中的方法 D,在这里面 D 就是回调方法。
代码示例:
1 | Java复制代码package com.aha.commons.callback; |
过程讲解:上面的示例是模拟了前端使用 Ajax
调用后端接口的过程。
关注 CustomFrontPage
类中的 main
方法,此方法的作用便是构建请求参数,发起远程调用接口。这个过程便是 CustomFrontPage
类的 main
去调用 RPCModule
的 call
方法,而 RPCModule
的 call
方法执行之后回调 CustomFrontPage
类中匿名内部类重写的 callback
方法的过程。
在这个过程中,RPCModule
就是底层代码,CustomFrontPage
类中匿名内部类重写的 callback
方法 就是高层定义的子程序。
实现回调的核心便是子类对象引用的传递。上面示例中使用的是匿名内部类的方式将引用传递给底层代码了。
回调的分类
- 同步回调:阻塞当前线程,回调方法执行完之后,继续执行下面的代码。
- 异步回调:不阻塞当前线程,可以继续执行下面的代码。
同步回调的实现方式就是上面那种方式,这边不在进行赘述,其实一般远程请求接口都应该是异步的方式。
异步回调的实现
异步回调的话,最容易想到的方案便是多线程的方式了。
1 | Java复制代码package com.aha.commons.callback; |
本文转载自: 掘金