@tanshenghu/web-utils
Version:
web公共方法
88 lines (75 loc) • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Orderly;
var _common = require('../common');
var _common2 = _interopRequireDefault(_common);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function Orderly(func) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var selfThis = this;
var touchLoading = false;
var tid = null;
var exeid = null;
// 防抖
if (options.type === 'debounce') {
return function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var result = void 0;
if (tid) clearTimeout(tid);
tid = setTimeout(function () {
result = func.apply(selfThis, args);
}, options.sleep);
return result;
};
} else if (options.type === 'throttle') {
// 节流
return function () {
var result = void 0;
var eNow = Date.now();
if (!exeid || eNow - exeid > options.sleep) {
exeid = eNow;
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
result = func.apply(selfThis, args);
}
return result;
};
}
return function () {
var args = Array.from(arguments);
args.push(function () {
touchLoading = false;
});
if (!touchLoading) {
touchLoading = true;
var ret = func.apply(selfThis, args);
_common2.default.seek().equal(ret && typeof ret.then === 'function', function () {
return ret.then(function () {
touchLoading = false;
});
}).equal(ret && typeof ret.finally === 'function', function () {
return ret.finally(function () {
touchLoading = false;
});
}).equal(ret && typeof ret.catch === 'function', function () {
return ret.catch(function () {
touchLoading = false;
});
}).else(function () {
return options.sleep === null ? null : setTimeout(function () {
touchLoading = false;
}, options.sleep || 1200);
}).get()();
}
};
} /**
* @Author: 谭生虎 TanShenghu tanshenghu@163.com
* @Update: 2020-03-20
* @Description: 防止“疯狂”操作 涉及到 防抖、节流等操作
*/
module.exports = exports['default'];