快应用开发技巧之lock篇
在编写快应用(Javascript)的过程中,会遇到许多需要加锁的场景,比如:
- 用户重复点击提交按钮,造成反复上传表单
- 用户连续下拉刷新,造成重复请求服务器
- 新手引导展现后,必须三秒后才能关闭
- ……
在js中,时下普遍的实现方式,可能是这样的:
if (locked)
return
locked = true
//处理逻辑
...
...
locked = false
在上述代码中,只要操作速度够快,if条件是可以穿透的,因为locked还没有置为true,新的行为事件就过来了。
在翻阅了Javascript的标准内置对象以后,我发现可以使用JavaScript Array的length属性,来实锁的逻辑。
废话不多说,先上代码,lock.js:
const lock = class {
constructor() {
this._lock = []
}
lock(ms = 0) {
let ok = this