当时学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被执行,因为他俩就是一个方法对象。