更新记录
1.0.0(2025-04-30)
下载此版本
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 4.55,Android:支持,iOS:支持,HarmonyNext:支持 |
× |
√ |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
鸿蒙元服务 |
× |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
kux-uts-while
一个优化的 while
工具函数,提供可中断的 while
循环包装函数,支持外部和内部流程控制 (break
/continue
)。
功能特性
- 外部中断 :通过
abort()
方法从循环外部强制终止
- 内部流程控制 :循环体可通过返回值触发
break
或 continue
- 同步执行 :保持原生
while
循环的原子性
- 类型安全 :完整的
uts
类型定义
- 线程安全:对安卓环境做特殊线程优化,不会卡UI线程
快速开始
基本用法
import { controllableWhile, ControlCommand } from '@/uni_modules/kux-uts-while';
let count = 0;
const { start } = controllableWhile(
() => count < 5,
(controller): ControlCommand => {
count++;
console.log(`当前计数: ${count}`);
return null;
}
)
start();
/* 输出
当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
*/
内部流程控制 (break
/continue
)
import { controllableWhile, ControlCommand } from '@/uni_modules/kux-uts-while';
let count = 0;
const { start } = controllableWhile(
() => count < 10,
(controller): ControlCommand => {
count++;
if (count % 3 == 0) {
console.log('跳过3的倍数');
return 'continue'; // 相当于原生continue
}
if (count == 7) {
console.log("触发内部终止");
return 'break'; // 相当于原生break
}
console.log("当前值:", count);
return null;
}
)
start();
/* 输出
当前值: [number] 1
当前值: [number] 2
跳过3的倍数
当前值: [number] 4
当前值: [number] 5
跳过3的倍数
触发内部终止
*/
外部中断
const { start, abort } = controllableWhile(
() => true,
(controller): ControlCommand => {
console.log("持续运行中...", new Date().toLocaleTimeString());
return null;
}
);
start();
// 3秒后外部终止
setTimeout(() => {
abort();
console.log("循环已被外部终止");
}, 3000);
/* 输出
持续运行中... Wed Apr 30 2025
持续运行中... Wed Apr 30 2025
...(持续输出直到3秒后)
循环已被外部终止
*/
安卓线程测试
下面是普通循环和使用该函数循环启动对比,普通while代码在启动时会卡UI几秒,而下面工具函数代码会瞬间完成启动。
普通while代码
while (count < 1000000) {
count++;
if (count % 3 == 0) {
// console.log('跳过3的倍数');
continue;
}
if (count == 900000) {
// console.log("触发内部终止");
break;
}
// console.log("当前值:", count);
}
工具函数代码
const { start, abort } = controllableWhile(
() => count < 1000000,
(controller): ControlCommand => {
count++;
if (count % 3 == 0) {
// console.log('跳过3的倍数');
return 'continue';
}
if (count == 900000) {
// console.log("触发内部终止");
return 'break';
}
// console.log("当前值:", count);
return null;
}
)
start();
API
controllableWhile(condition, body)
创建可循环实例
参数:
condition: () => boolean
循环条件函数,每次迭代前调用,返回 true
继续循环
body: (controller: Controller) => ControlCommand
循环体函数,可以返回以下值:
"break"
:立即终止循环
"continue"
:跳过本次迭代
null
正常执行
返回值:
start: () => void
启动循环
abort: () => void
外部中断循环
类型定义
/**
* interface.uts
* uts插件接口定义文件,按规范定义接口文件可以在HBuilderX中更好的做到语法提示
*/
export type ControlCommand = 'continue' | 'break' | null;
export type ControllableWhileReturn = {
start: () => void;
abort: () => void;
execContinue: () => 'continue';
execBreak: () => 'break';
};
export type Controller = {
abort: () => void;
};
结语
友情推荐