callback
- 回调其实有很多作用,比如提高代码复用率
提高复用率
- 我们先举个简单的例子
js
const work = (callback) =>{
console.log('起床')
console.log('穿衣服')
console.log('刷牙洗脸')
console.log('吃早饭')
callback && callback() // 有回调就调,没有就不执行
console.log('开始工作')
}
const byBike = () =>{
console.log('今天骑车去上班!')
}
const byBus = () =>{
console.log('今天坐巴士上班!')
}
work(byBike)
// 小明的方式
// 起床 穿衣服 刷牙洗脸 吃早饭 今天骑车去上班! 开始工作- 拿刚刚这个不严谨的案例(有人可能不刷牙🤪,不吃饭)
- 我们把通用的代码放在一起,不一样的地方就用回调函数,这样就能提高代码复用率
回调1(顺序执行)
js
const a = () =>{
setTimeout(() =>{
console.log('a执行完了!才能执行b!')
},1000)
}
const b = () =>{
console.log('开始执行b')
}
a()
b()
// 假如a执行很久,打印顺序 开始执行b a执行完了!才能执行b!
// 这和我们预期是不一致的- 把函数当作参数转到另外一个函数中,当需要使用这个函数的时候,再回调运行这个函数
js
const a = (callback) =>{
setTimeout(() =>{
console.log('a执行完了!才能执行b!')
// 这里其实还要在执行前最好判断一下它是不是一个函数 typeof callback === 'function'
callback && callback()
},1000)
}
const b = () =>{
console.log('开始执行b')
}
a(b)
// 打印顺序 a执行完了!才能执行b! 开始执行b回调2
js
// 假如连接一台设备,调用连接方法,在不同的状态它会返回给调用者一条消息
// 调用者能实时知道它的连接状态,这样就可以根据返回的不同状态走不同的处理方法
const connect = (callback) =>{
//假设有识别程序,识别到设备,并调用下面的回调
callback(1,'已识别到设备')
// 未识别到设备
callback(0,'未识别到设备')
// 正在连接设备
callback(2,'正在连接设备')
// 设备连接成功
callback(3,'设备连接成功')
// 设备连接失败
callback(0,'设备连接失败')
}
const apply = () =>{
connect((type, msg)=>{
if(type === 0){
console.log('失败:'+ msg)
}
else{
console.log('当前步骤' + type + ':' + msg)
}
})
}