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

現實并不容易

為什么我們需要回調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函數返回前什么都做不了

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ù)流程
新的編程思維模式
調用某個函數,獲取結果 處理獲取到的結果
res = request();handle(res);

request(handle);
第一部分是我們來處理的,也就是調用request之前的部分 第二部分不是我們處理的,而是在其它線程、進程、甚至另一個機器上處理的。
正式定義
在計算機科學中,回調函數是指一段以參數的形式傳遞給其它代碼的可執(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) {....});});});});
總結
評論
圖片
表情
