10張圖讓你徹底理解回調函數(shù)
不知你是不是也有這樣的疑惑,我們?yōu)槭裁葱枰卣{函數(shù)這個概念呢?直接調用函數(shù)不就可以了?回調函數(shù)到底有什么作用?程序員到底該如何理解回調函數(shù)?
這篇文章就來為你解答這些問題,讀完這篇文章后你的武器庫將新增一件功能強大的利器。
一切要從這樣的需求說起
調用make_youtiao() 等待該函數(shù)執(zhí)行完成 該函數(shù)執(zhí)行完后繼續(xù)后續(xù)流程
保存當前被執(zhí)行函數(shù)的上下文 開始執(zhí)行make_youtiao()這個函數(shù) make_youtiao()執(zhí)行完后,控制轉回到調用函數(shù)中

現(xiàn)實并不容易

為什么我們需要回調callback
make_youtiao(10000);sell();

make_youtiao(10000, sell);
void make_youtiao(int num, func call_back) {// 制作油條call_back(); //執(zhí)行回調}
void make_youtiao(int num) {real_make_youtiao(num);sell(); //執(zhí)行回調}
void make_youtiao(int num) {real_make_youtiao(num);if (Team_B) {sell(); // 執(zhí)行回調} else if (Team_D) {store(); // 放到倉庫}}
異步回調
make_youtiao(10000, sell);// make_youtiao函數(shù)返回前什么都做不了

void make_youtiao(int num, func call_back) {real_make_youtiao(num);call_back(); //執(zhí)行回調}
void make_youtiao(int num, func call_back) {// 在新的線程中執(zhí)行處理邏輯create_thread(real_make_youtiao,num,call_back);}

make_youtiao(10000, sell);// 立刻返回// 執(zhí)行后續(xù)流程
新的編程思維模式
調用某個函數(shù),獲取結果 處理獲取到的結果
res = request();handle(res);

request(handle);
第一部分是我們來處理的,也就是調用request之前的部分 第二部分不是我們處理的,而是在其它線程、進程、甚至另一個機器上處理的。
正式定義
在計算機科學中,回調函數(shù)是指一段以參數(shù)的形式傳遞給其它代碼的可執(zhí)行代碼。

回調的類型


回調對應的編程思維模式
常規(guī)模式:調用完S服務后后我去執(zhí)行X任務, 回調模式:調用完S服務后你接著再去執(zhí)行X任務,
為什么異步回調越來越重要
回調地獄,callback hell?
a = GetServiceA();b = GetServiceB(a);c = GetServiceC(b);d = GetServiceD(c);
GetServiceA(function(a){GetServiceB(a, function(b){GetServiceC(b, function(c){GetServiceD(c, function(d) {....});});});});
【推薦閱讀】
Spring Boot 無侵入式實現(xiàn) API 接口統(tǒng)一 Json 格式返回 Redis 為什么默認 16 個數(shù)據(jù)庫? IntelliJ IDEA 超實用技巧分享,不能再全了! 圖片驗證碼的需求分析以及Java代碼優(yōu)雅實現(xiàn)! 給你的 MyBatis-Plus 裝上批量插入的翅膀
評論
圖片
表情
