添加setTimeout和clearTimeout支持

This commit is contained in:
fofolee 2025-02-20 21:57:53 +08:00
parent 60ac9fbc81
commit cf37411717
4 changed files with 28 additions and 7 deletions

View File

@ -42,7 +42,6 @@ const quickcommand = {
// setTimout 不能在 vm2 中使用,同时在 electron 中有 bug
sleep: function (ms) {
var start = new Date().getTime();
try {
// node 16.13.1
child_process.execSync(getSleepCodeByShell(ms), {
@ -50,23 +49,26 @@ const quickcommand = {
windowsHide: true,
});
} catch (ex) {}
var end = new Date().getTime();
return end - start;
return;
},
// 重写 setTimeout
setTimeout: function (callback, ms) {
var start = new Date().getTime();
child_process.exec(
const child = child_process.exec(
getSleepCodeByShell(ms),
{
timeout: ms,
},
() => {
var end = new Date().getTime();
callback(end - start);
if (child.signalCode === "SIGKILL") return;
callback();
}
);
return child.pid;
},
clearTimeout: function (pid) {
kill(pid, "SIGKILL");
},
asyncSleep: async function (ms) {

View File

@ -137,6 +137,9 @@ let getSandboxFuns = () => {
os,
child_process,
quickcomposer,
// timeout
setTimeout: quickcommand.setTimeout,
clearTimeout: quickcommand.clearTimeout,
};
Object.keys(shortCodes).forEach((f) => {
sandbox[f] = shortCodes[f];

View File

@ -88,3 +88,6 @@ declare var console: {
log(message?: any): void,
error(message?: any): void
}
declare var setTimeout: (callback: () => void, ms: number) => number;
declare var clearTimeout: (timeoutId: number) => void;

View File

@ -235,6 +235,19 @@ interface quickcommandApi {
*/
setTimeout(callback: () => void, ms);
/**
*
*
* @param timeoutId timeoutId
* ```js
* const timeoutId = quickcommand.setTimeout(()=>{
* console.log('这条内容不会被打印')
* }, 2000)
* quickcommand.clearTimeout(timeoutId)
* ```
*/
clearTimeout(timeoutId: number): void;
/**
* async
*