Browse Source

feat(utils): 添加校验器函数并优化节流函数注释

- 新增validates校验器函数,支持校验函数数组和布尔返回值
- 优化promiseThrottle函数的参数顺序和类型注释
- 将_promiseThrottleMap变量移至文件顶部声明
master
wei 1 week ago
parent
commit
f41698a90e
  1. 35
      libs/utils/index.js

35
libs/utils/index.js

@ -1,11 +1,14 @@
const _promiseThrottleMap = {};
/**
* 节流函数
* @description 本函数接收一个Promise当Promise在pending状态中会自动阻止下次继续触发在finally后释放同时允许传入一个时限如果达到时限Promise还未finally会执行onTime回调
* @description 本函数接收一个Promise当Promise在pending状态中会自动阻止下次继续触发在finally后释放
* 同时允许传入一个时限如果达到时限Promise还未finally会执行onTime回调
* @param {string|number} promise_id 节流ID同ID的内部节流不同ID的互不干扰
* @param {Function} promiseFunction 要节流的Promise函数该函数应该返回一个Promise
* @param {number} time x毫秒后触发onTime如果在此之前Promise已经finally则不执行onTime
* @param {Function} promiseFunction 要节流的Promise函数该函数应该返回一个Promise
* @param {Function} onTime 事件
* @returns
* @returns {Promise} 节流后的Promise
*/
export function promiseThrottle(promise_id, time = 500, promiseFunction, onTime) {
if (_promiseThrottleMap[promise_id] === true)
@ -21,7 +24,6 @@ export function promiseThrottle(promise_id, time = 500, promiseFunction, onTime)
clearTimeout(timeout);
});
}
let _promiseThrottleMap = {};
/**
* status 状态栏 | menu 小程序胶囊 | screen 屏幕
@ -61,7 +63,7 @@ export function useHeight() {
/**
* 通过类或者id 获取元素高度
* @param {string} idOrClass
* @returns {Promise{number}}
* @returns {Promise{number}} 元素高度
*/
export function getHeight(idOrClass) {
return new Promise((resolve) => {
@ -95,3 +97,26 @@ export function gotoBack() {
});
}
}
/**
* 校验器
* @example
* const validators = [
* () => name || "请输入姓名",
* () => !email && "请输入邮箱", // && if true: return msge
* ];
* validates(validators);
* @param {Array<Function>|Function} validators 校验函数数组每个函数返回校验错误信息或空字符串
* @param {boolean} returnBoolean 是否返回布尔值默认返回字符串
* @returns {string|boolean} 校验错误信息或空字符串
*/
export function validates(validators, returnBoolean = true) {
for (const callback of [validators].flat()) {
const msg = callback();
if (msg) {
uni.showToast({ title: msg });
return returnBoolean ? false : msg;
}
}
return returnBoolean ? true : "";
}
Loading…
Cancel
Save