函数&回调
# 什么是回调函数
回调函数(callback)是软件设计的概念,指以参数的形式传递给其它代码的可执行代码。函数是可以当作参数的。
# 为什么需要回调
在程序开发中,往往会遇到耗时的数据请求等操作,在直接调用的情况下,调用线程会被阻塞暂停,在等待执行完毕后才能继续运行,主函数的UI就会呈现 “卡死” 的效果。
一种更好的做法是数据请求函数应该使用异步,UI继续运行(如加载条等等的绘制),请求完毕后函数会通知UI进行更新。类似此种模式被称为异步。
# 异步回调
在aLua中,异步回调函数的一个好例子就是 Http请求,例如:
Http.get(url,cookie,charset,header,callback)
Http.get异步方法提供了相应的callback,在执行中,传入的函数会在异步回调中被执行。callback传入的参数由此库本身定义。
请看下面的执行示例
Http.get('https://zhuanlan.zhihu.com',nil,'utf8',nil,function(code,content)
--[[
code-状态码,content-获取到的内容
]]
if 状态码 ==200 then
print('ok--')
else
print('网站访问异常')
end
end)
在具体执行中,我们知道Http异步函数不会阻塞主线程,而是独立运行。然而我们并不知道这个函数什么时候才能执行完毕,那么就有必要让 Http.get()
这个函数知道获取到数据后该执行什么,例如取消加载动画,装载数据等等。
回调函数就像一张通知单,告诉函数工作完毕要做什么。它既方便了团队间协作,又可以避免因不清楚函数什么时间执行完毕而不知所措。
回调函数的本质就是将相应的函数封装成模块去 “告诉” 其他模块。
Gitlab在线编辑&贡献你的智慧 (opens new window)
上次更新: 2022/08/03, 09:42:19