當時學Java的時候不理解什麼叫回調,看了好長一段時間,也沒找到什麼相對簡單的講解。
- Java 內因爲不能使用委託(方法當成參數傳遞),所以只能藉助Interface(接口)來實現。在需要回調的地方給一個接口參數,用到的時候,傳接口實例即可(扯遠了)。
- Javascript因爲可以使用委託,那麼簡單很多,我就不說得很複雜。回調說白了,就是:
我需要返回東西給你,但是我也不知道什麼時候返回給你(異步)
。
//退款
let Refund = {};
//退款
Refund.done = function (callback) {
let postData = {
//TODO
// orderid: '',
// openid: '',
};
Fetch.postObjData(API_URL.mobile.refundUrl, postData).then((data) => {
console.log(data);
//TODO 需要判斷是否成功
if (typeof callback === "function") {
callback();
}
});
};
這邊方法done需要傳一個參數過來,這個參數是function類型的,然後我就進行了網絡請求(異步),等我網絡請求結束,我就調用這個方法callback();,然後你調用我這個方法的地方,callback也就被調用了。誰調用的?我這邊(Fetch裏面)調用的。
function callback() {
console.log('被調用成功');
}
Refund.done(callback);
這邊還需要考慮一個問題:就是回調的作用域問題。
流程是:
- 我調用你->Refund.done給了你一個方法類型的參數callback(名字隨便取)
- 你開始執行,你執行到Fetch裏面,Fetch執行完畢,你需要返回給我東西,怎麼返回,通過我剛剛給你的callback,你執行了callback,那麼就相當與我這邊的callback被執行,因爲他倆就是一個方法對象。