diff --git a/public/time.js b/public/time.js index 05079ef..d25c03a 100644 --- a/public/time.js +++ b/public/time.js @@ -1,68 +1,2 @@ -// author: inu1255 - -const path = require('path') - -function newPromise(fn) { - let a, b - var tmp = { - resolve(x) { - if (this.pending) { - a(x) - this.resolved = true - this.pending = false - } - }, - reject(e) { - if (this.pending) { - b(e) - this.rejectd = true - this.pending = false - } - }, - pending: true, - resolved: false, - rejected: false - } - /** @type {Promise} */ - var pms = new Promise(function (resolve, reject) { - a = resolve - b = reject - if (fn) fn(tmp.resolve, tmp.reject) - }) - return Object.assign(pms, tmp) -} - -let cbIdx = 1 -const cbMap = new Map() -function getWorker() { - if (getWorker.worker) return getWorker.worker - const worker = new Worker(path.join(__dirname, 'time.worker.js')) - getWorker.worker = worker - worker.onmessage = (e) => { - if (e.data && cbMap.has(e.data.cb)) { - cbMap.get(e.data.cb).apply(null, e.data.args) - } - } - return worker -} - -function call(method, args) { - const cb = cbIdx++ - let pms = newPromise() - cbMap.set(cb, function (err, data) { - if (err) pms.reject(err) - else pms.resolve(data) - }) - getWorker().postMessage({ - method, - args, - cb - }) - return pms -} - -function sleep(ms) { - return call('sleep', [ms]) -} - -exports.sleep = sleep +// time.js author: inu1255 +const path=require("path");function newPromise(fn){let a,b;var tmp={resolve(x){if(this.pending){a(x);this.resolved=true;this.pending=false}},reject(e){if(this.pending){b(e);this.rejectd=true;this.pending=false}},pending:true,resolved:false,rejected:false};var pms=new Promise(function(resolve,reject){a=resolve;b=reject;if(fn)fn(tmp.resolve,tmp.reject)});return Object.assign(pms,tmp)}let cbIdx=1;const cbMap=new Map;function getWorker(){if(getWorker.worker)return getWorker.worker;const worker=new Worker(path.join(__dirname,"time.worker.js"));getWorker.worker=worker;worker.onmessage=e=>{if(e.data&&cbMap.has(e.data.cb)){cbMap.get(e.data.cb).apply(null,e.data.args)}};return worker}function call(method,args){const cb=cbIdx++;let pms=newPromise();cbMap.set(cb,function(err,data){if(err)pms.reject(err);else pms.resolve(data)});getWorker().postMessage({method:method,args:args,cb:cb});return pms}function sleep(ms){return call("sleep",[ms])}exports.sleep=sleep; \ No newline at end of file diff --git a/public/time.worker.js b/public/time.worker.js index d62d14e..97b632d 100644 --- a/public/time.worker.js +++ b/public/time.worker.js @@ -1,21 +1,2 @@ -// author: inu1255 - -const apis = { - sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)) - } -} - -onmessage = (event) => { - const data = event.data - if (!data) return - const { cb, method, args } = data - if (!apis[method]) { - postMessage({ cb, err: 'no such method' }) - return - } - apis[method].apply(null, args).then( - (res) => postMessage({ cb, data: res }), - (err) => postMessage({ cb, err }) - ) -} +// time.worker.js author: inu1255 +const apis={sleep(ms){return new Promise(resolve=>setTimeout(resolve,ms))}};onmessage=event=>{const data=event.data;if(!data)return;const{cb,method,args}=data;if(!apis[method]){postMessage({cb:cb,err:"no such method"});return}apis[method].apply(null,args).then(res=>postMessage({cb:cb,data:res}),err=>postMessage({cb:cb,err:err}))}; \ No newline at end of file