init
This commit is contained in:
55
uni_modules/lime-shared/while/index.ts
Normal file
55
uni_modules/lime-shared/while/index.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
// @ts-nocheck
|
||||
|
||||
// 来自kux大佬的神之一手
|
||||
// 原地址 https://ext.dcloud.net.cn/plugin?id=23291
|
||||
export type ControlCommand = 'continue' | 'break' | null;
|
||||
|
||||
export type ControllableWhileReturn = {
|
||||
start: () => void;
|
||||
abort: () => void;
|
||||
execContinue: () => 'continue';
|
||||
execBreak: () => 'break';
|
||||
};
|
||||
|
||||
export type Controller = {
|
||||
abort: () => void;
|
||||
};
|
||||
|
||||
export function controllableWhile(
|
||||
condition : () => boolean,
|
||||
body: (controller: Controller) => ControlCommand
|
||||
): ControllableWhileReturn {
|
||||
let isActive = true;
|
||||
|
||||
const controller: Controller = {
|
||||
abort: () => {
|
||||
isActive = false;
|
||||
}
|
||||
};
|
||||
|
||||
const execContinue = () => 'continue';
|
||||
const execBreak = () => 'break';
|
||||
|
||||
return {
|
||||
start: () => {
|
||||
// #ifdef APP-ANDROID
|
||||
UTSAndroid.getDispatcher('io').async((_) => {
|
||||
// #endif
|
||||
while (isActive && condition()) {
|
||||
const result = body(controller);
|
||||
if (result == 'break') {
|
||||
controller.abort();
|
||||
break;
|
||||
} else if (result == 'continue') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// #ifdef APP-ANDROID
|
||||
}, null);
|
||||
// #endif
|
||||
},
|
||||
abort: controller.abort,
|
||||
execContinue: execContinue,
|
||||
execBreak: execBreak
|
||||
} as ControllableWhileReturn;
|
||||
}
|
Reference in New Issue
Block a user