更新记录

1.0.0(2025-04-30) 下载此版本

  • 初始发布。

平台兼容性

Vue2 Vue3
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() 方法从循环外部强制终止
  • 内部流程控制 :循环体可通过返回值触发 breakcontinue
  • 同步执行 :保持原生 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;
};

结语

kux 不生产代码,只做代码的搬运工,致力于提供uts 的 js 生态轮子实现,欢迎各位大佬在插件市场搜索使用 kux 生态插件:https://ext.dcloud.net.cn/search?q=kux

友情推荐

  • TMUI4.0:包含了核心的uts插件基类.和uvue组件库
  • GVIM即时通讯模版:GVIM即时通讯模版,基于uni-app x开发的一款即时通讯模版
  • t-uvue-ui:T-UVUE-UI是基于UNI-APP X开发的前端UI框架
  • UxFrame 低代码高性能UI框架:【F2图表、双滑块slider、炫酷效果tabbar、拖拽排序、日历拖拽选择、签名...】UniAppX 高质量UI库
  • wx-ui 基于uni-app x开发的高性能混合UI库:基于uni-app x开发的高性能混合UI库,集成 uts api 和 uts component,提供了一套完整、高效且易于使用的UI组件和API,让您以更少的时间成本,轻松完成高性能应用开发。
  • firstui-uvue:FirstUI(unix)组件库,一款适配 uni-app x 的轻量、简洁、高效、全面的移动端组件库。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问